π 1. μ€νΈλ¦Όμ ν΅μ¬
μ€νΈλ¦Όμ κ·Έμ λ νλμ APIκ° μλ, ν¨μν νλ‘κ·Έλλ°μ κΈ°μ΄ν ν¨λ¬λ€μμ΄λ€.
μ€νΈλ¦Ό ν¨λ¬λ€μμ ν΅μ¬μ κ³μ°μ μΌλ ¨μ λ³ν(transformation)μΌλ‘ μ¬κ΅¬μ±νλ λΆλΆμ΄λ€. μ΄λ κ° λ³ν λ¨κ³λ κ°λ₯ν ν μ΄μ λ¨κ³μ κ²°κ³Όλ₯Ό λ°μ μ²λ¦¬νλ μμ ν¨μμ¬μΌ νλ€.
μμ ν¨μλ μ€μ§ μ λ ₯λ§μ΄ κ²°κ³Όμ μν₯μ μ£Όλ ν¨μλ€. λ€λ₯Έ κ°λ³ μνλ₯Ό μ°Έμ‘°νμ§ μκ³ , ν¨μ μ€μ€λ‘λ λ€λ₯Έ μνλ₯Ό λ³κ²½νμ§ μμμΌ νλ€. μ΄λ₯Ό μν΄μλ (μ€κ° λ¨κ³λ μ’ λ¨ λ¨κ³λ ) μ€νΈλ¦Ό μ°μ°μ 건λ€λ ν¨μ κ°μ²΄λ λͺ¨λ λΆμμ©(side effect)μ΄ μμ΄μΌ νλ€.
κ·Έλ λ€λ©΄ λ§μ½ λΆμμ©(side effect)μ΄ λ°μνλ©΄ μ΄λ»κ² λ κΉ? μλμ κ°μ λ¬Έμ μ μ΄ λ°μνκ² λλ€.
- κ°λ
μ±
Streamμ μ¬μ©ν μκ° λ°μ΄ν°μ λ³νκ³Ό νκ°κ° μ΄λ€μ§ κ²μ΄λΌ κΈ°λνλλ° κ·Έλ° μ½λκ° μλμ΄μ μ½κΈ° μ΄λ ΅λ€. - μ¬μ¬μ©μ±
μΈλΆ μνμ μμ‘΄ν΄λ²λ¦¬κΈ° λλ¬Έμ μ½κ² μ¬μ¬μ©μ΄ λΆκ°λ₯ν΄μ§λ€. - ν
μ€νΈ κ°λ₯μ±
Stream μ μΌλ° λ‘μ§κ³Ό λ€λ₯Έ νλ¦μ κ°μ§λ€. λ³λ ¬λ‘λ μ€νλ μ μλ κ²μ΄λΌ ν μ€νΈνκΈ°λ μ΄λ €μμ§λ€. - λμμ±
λ©ν° μ€λ λ νλ‘κ·Έλλ°μμ νν λ°μνλ 곡μ κ°λ³ μνμ κ΄λ ¨λ λ¬Έμ λ₯Ό νΌνκΈ° μ΄λ €μμ§λ€.
π 2. μμ
ν μ€νΈ νμΌμμ λ¨μ΄λ³ μλ₯Ό μΈμ΄ λΉλνλ₯Ό λ§λ λ€κ³ ν΄λ³΄μ.
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μμ μΌμ΄λλλ°, μ΄λ μΈλΆ μν(λΉλν)λ₯Ό μμ νλ λλ€λ₯Ό μ€ννλ©΄ λ¬Έμ κ° μκΈ΄λ€. (forEach μ°μ°μ μ€νΈλ¦Ό κ³μ° κ²°κ³Όλ₯Ό λ³΄κ³ ν λλ§ μ¬μ©νκ³ , κ³μ°νλ λ°λ μ°μ§ μλλ‘ νμ.)
μ¬λ°λ₯΄κ² μ€νΈλ¦Όμ μ¬μ©ν κ²½μ°λ μλμ κ°λ€.
Map<String, Long> freq;
try (Stream<String> words = new Scanner(file).tokens()) {
freq = words.collect(groupingBy(String::toLowerCase, counting()));
}
π 3. μμ§κΈ°(collecotor)
μμ§κΈ°(collector), java.util.stream.Collectorsμ λν΄μ μμ보μ. μ΄λ₯Ό μΆμ(reduction) μ λ΅μ μΊ‘μνν λΈλλ°μ€ κ°μ²΄λΌκ³ μκ°νμ. μ¬κΈ°μ λ§ν μΆμλ μ€νΈλ¦Όμ μμλ€μ κ°μ²΄ νλλ‘ μ·¨ν©νλ€λ λ»μ΄λ€.
Collectors ν΄λμ€μλ 39κ°μ λ©μλκ° μ‘΄μ¬νλ€. λνμ μΌλ‘λ, 리μ€νΈλ₯Ό λ°ννλ toList(), μ§ν©μ λ°ννλ toSet(), νλ‘κ·Έλλ¨Έκ° μ§μ ν 컬λ μ νμ μ λ°ννλ toCollection(collectionFactory)κ° μλ€.
ν΄λΉ κΈμ
Joshua Bloch λμ 'Effective Java 3/E',
μ μ΄ν¬μ(Jake Seo)λμ 'μ΄νν°λΈ μλ°, μ½κ² μ 리νκΈ° - item 46. μ€νΈλ¦Όμμλ λΆμμ© μλ ν¨μλ₯Ό μ¬μ©νλΌ'
λ₯Ό μ°Έκ³ νμμ΅λλ€.