스터디/이펙티브 자바

[Effective Java] Item46. 스트림에서는 부작용 없는 함수를 사용하라

📝 작성 : 2022.07.10  ⏱ 수정 : 
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
반응형