[Effective Java 3/e] 아이템 46 - 스트림에서는 부작용 없는 함수를 사용하라


아이템 46 - 스트림에서는 부작용 없는 함수를 사용하라

스트림 패러다임을 이해하지 못한 채 API만 사용했다 - 따라 하지 말 것

Map<String, Long> freq = new HashMap<>();
try (Stream<String> words = new Scanner(file).tokens()) {
  words.forEach(word -> {
    freq.merge(word.toLowerCase(), 1L, Long::sum);
  });
}

스트림을 제대로 활용해 빈도표를 초기화한다

Map<String, Long> freq;
try (Stream<String> words = new Scanner(file).tokens()) {
  freq = words.collect(groupingBy(String::toLowerCase, counting()));
}
  • forEach 연산은 스트림 계산 결과를 보고할 때만 사용하고, 계산하는 데는 쓰지 말자