Map<String, Long> freq = new HashMap<>();
try(Stream<String> words = new Scanner(file).tokens()) {
words.forEach(word -> {
freq.merge(word.toLowerCase(), 1L, Long::sum);
});
}
forEach 내부에서 외부 상태(freq)를 수정하므로 순수 함수가 아닙니다.
Map<String, Long> freq;
try(Stream<String> words = new Scanner(file).tokens()) {
freq = words.collect(groupingBy(String::toLowerCase, counting()));
}
Collector
collect 메서드는 스트림 종료작업으로 Collector 타입의 인자를 받아서 처리합니다.
java.util.stream.Collectors에서 자주 사용하는 수집기(collector)를 제공합니다.
자주 사용하는 메서드는 아래와 같습니다.
- toList()
- toMap()
- groupingBy()
- partitionBy()
- minBy()
- maxBy()
- joining
반응형
'스터디 > 이펙티브 자바' 카테고리의 다른 글
[Effective Java] Item48. 스트림 병렬화는 주의해서 사용하라 (0) | 2022.07.10 |
---|---|
[Effective Java] Item47. 반환 타입으로는 스트림보다 컬렉션이 낫다 (0) | 2022.07.10 |
[Effective Java] Item45. 스트림은 주의해서 사용하라 (0) | 2022.07.10 |
[Effective Java] Item 44. 표준 함수형 인터페이스를 사용하라 (0) | 2022.07.03 |
[Effective Java] Item43. 람다보다는 메서드 참조를 사용하라 (0) | 2022.07.03 |