Chapter 14. 람다와 스트림
2. 스트림(stream)
(5) 스트림의 최종 연산
- forEach()
- peek()와 달리 스트림의 요소를 소모하는 최종 연산. 스트림의 요소를 출력하는 용도로 많이 사용됨
void forEach(Consumer<? super T> action)
- 조건 검사 - allMatch(), anyMatch(), noneMatch(), findFirst(), findAny()
- 스트림의 요소에 대해 지정된 조건에 대해 모든 요소 혹은 일부 요소가 일치하는지, 아니면 어떤 요소도 일치하지 않는지를 확인하는데에 사용
boolean allMatch(Predicate<? super T> predicate)
boolean anyMatch(Predicate<? super T> predicate)
boolean noneMatch(Predicate<? super T> predicate)
- 통계 - count(), sum(), average(), max(), min()
- 기본형 스트림에는 스트림의 요소들에 대한 통계 정보를 얻을 수 있는 위의 메서드들이 있음
- 그러나 기본형이 아닌 스트림은 count(), max(), min()만 존재
- 따라서 대부분의 경우 기본형 스트림으로 변환을 해서 통계 메서드를 사용하거나 reduce(), collect()를 사용해서 통계 정보를 얻음
- 리듀싱 - reduce()
- 스트림의 요소를 줄여나가면서 연산을 수행하고 최종 결과를 반환.
- 초기값과 어떤 연산으로 스트림의 요소를 줄여나갈 것인지만 결정하면 됨
(6) collect()
- collect() : 스트림의 요소를 수집하는 최종 연산, 앞에서 배운 리듀싱과 유사함
- collect()가 스트림의 요소를 수집하려면 어떻게 수집할 것인가에 대한 방법이 정의되어야 함 -> 이를 정의한 것이 컬렉터
- collect() : 스트림의 최종 연산, 매개변수로 컬렉터를 필요로 함
- Collector : 인터페이스, 컬렉터는 이 인터페이스를 구현해야 함
- Collectors : 클래스, static 메서드로 미리 작성된 컬렉터를 제공
- 스트림을 컬렉션과 배열로 변환 - toList(), toSet(), toMap(), toCollection(), toArray()
- 통계 - counting(), summingInt(), averagingInt(), maxBy(), minBy()
- 리듀싱 - reducing()
- 문자열 결합 - joining()
- 그룹화와 분할 - groupingBy(), partitioningBy()
- 그룹화 : 스트림의 요소를 특정 기준으로 그룹화
- 분할 : 스트림의 요소를 두 가지, 지정된 조건에 일치하는 그룹과 일치하지 않는 그룹으로의 분할
- 그룹화와 분할 둘 다 결과는 Map에 담겨 반환됨
- 스트림을 두 개의 그룹으로 나눠야 한다면 분할이 더 빠름, 그 외에는 그룹화를 사용
Map<Boolean, List<Student>> stuBySex = stuStream.collect(patitioningBy(Student::isMale, counting()));
List<Student> maleStudent = stuBySex.get(true);
List<Student> femaleStudent = stuBySex.get(false);
Map<Integer, List<Student>> stuByBan = stuStream.collect(groupingBy(Student::getBan, toList()));
(7) 스트림의 변환