💡 핵심
- 중간연산은 → 연산결과가 스트림임을 알 수 있다 → 반복적으로 적용가능
- 최종연산은 → 연산결과가 스트림이 아니다! → 한번만 적용가능
- 최종연산 후에 → 스트림이 닫힌다 (더이상 사용불가) (새로 스트림 만들어서 써야함)
Stream<T> distinct() //중복을 제거
Stream<T> filter(조건식) //조건에 안 맞는 요소 제외
Stream<T> limit(5) //5개 자름
Stream<T> skip(3) //3개를 건너뜀
Stream<T> peek(Consumer<T> action) //forEach랑 비슷 -> 작업 중간에 확인할 때 사용
Stream<T> sorted() //스트림의 요소 정렬
Stream<T> sorted(정렬기준) // 정렬 기준에 따라 정렬
map, flatMap = 스트림의 요소를 변환
어떻게 변화할지를 (람다식으로 줌)
forEach()// 지정된 작업 수행
forEachOrdered() //순서유지 -> 병렬작업시 작업순서를 유지해서 처리
count() //스트림 요소의 갯수 반환
max(정렬기준) //최대값
min(정렬기준) //최소값
findAny() //스트림의 요소 아무거나 하나 반환 (필터랑 같이 사용됨)
findFirst() //첫번째 요소 (필터랑 같이 사용됨)
allMatch(조건식) //모두 만족하는지 확인(boolean 타입)
anyMatch(조건식) //하나라도 만족하는지 확인 (boolean 타입)
noneMatch(조건식) //모두 만족하지 않는지 ****(boolean 타입)
toArray() //스트림의 모든 요소를 Object[] 객체 배열로 담아서 줌
toArray(generate()) // 제너레이터를 주면 특정 타입으로 받을수 있다????
reduce(), collect 최종연산의 핵심
reduce() //스트림의 요소를 하나씩 줄여가며 계산 (예시 sum -> 1, 2, 3 이면 -> 1, 2, 3 하나씩 줄여가며 연산함)