Item 46. Side-Effect-Free Function
์คํธ๋ฆผ์์๋ ๋ถ์์ฉ ์๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ผ
์คํธ๋ฆผ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ดํ ํจ๋ฌ๋ค์์ด๊ธฐ ๋๋ฌธ์, ์คํธ๋ฆผ์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํจ๋ฌ๋ค์์ด ์ ์ฉ๋๋ค. ์คํธ๋ฆผ ํจ๋ฌ๋ค์์ ํต์ฌ์ ๊ณ์ฐ์ ์ผ๋ จ์ ๋ณํ์ผ๋ก ์ฌ๊ตฌ์ฑํ๋ ๋ถ๋ถ์ธ๋ฐ, ์ด๋ ๊ฐ ๋ณํ ๋จ๊ณ๋ ๊ฐ๋ฅํ ํ ์ด์ ๋จ๊ณ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋ ์์ ํจ์์ฌ์ผ ํ๋ค.
// ์ ์ข์ ์์
class Example {
public static void main(String[] args) {
Map<String, Long> freq = new HashMap<>();
try (Stream<String> words = new Scanner(file).tokens()) {
// ์คํธ๋ฆผ API๋ฅผ ์ฌ์ฉํ์ง๋ง ๋จ์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ๊ฒ๊ณผ ๊ฐ๋ค.
words.forEach(word -> {
// ๋จ์ด๋ฅผ ์๋ฌธ์๋ก ๋ณํํ ๋ค์, ์ธ๋ถ ์ํ๋ฅผ ์์ (์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ผ ์ด์์ ์ผ์ ์ํ ์ค)
freq.merge(word.toLowerCase(), 1L, Long::sum);
});
}
}
}
// ์ข์ ์์
class Example {
public static void main(String[] args) {
Map<String, Long> freq;
try (Stream<String> words = new Scanner(file).tokens()) {
// ์คํธ๋ฆผ ํ์ดํ๋ผ์ธ์ ์ด์ฉํด ์ธ๋ถ ์ํ๋ฅผ ์์ ํ์ง ์๊ณ ๋จ์ด ๋น๋๋ฅผ ๊ณ์ฐ
freq = words
.collect(groupingBy(String::toLowerCase, counting()));
}
}
}
forEach
์ฐ์ฐ์ ์ข
๋จ ์ฐ์ฐ ์ค ๊ธฐ๋ฅ์ด ๊ฐ์ฅ ์ ๊ณ ์คํธ๋ฆผ ๋ต์ง ๋ชปํ ์ฐ์ฐ์ด๊ธฐ ๋๋ฌธ์, ์์ ๊ฐ์ด ์คํธ๋ฆผ ํจ๋ฌ๋ค์์ ์ฅ์ ์ ์ ๋๋ก ์ด๋ฆฌ์ง ๋ชปํ ์ ์๋ค.
๋๋ฌธ์ forEach
์ฐ์ฐ์ ์คํธ๋ฆผ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ ๋๋ง ์ฌ์ฉํ๊ณ , ๊ณ์ฐํ๋ ๋ฐ๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
Collectors
Collectors
๋ ์คํธ๋ฆผ์ ์์๋ฅผ ์์ฝ๊ฒ ์ปฌ๋ ์
์ผ๋ก ๋ชจ์ ์ ์๊ฒ ํด์ฃผ๋๋ฐ, ์คํธ๋ฆผ์ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ฉํ๋ ค๋ฉด Collectors
๋ฅผ ์ ์์๋๋ ๊ฒ์ด ์ข๋ค.
toList
, toSet
, toCollection
, toMap
, groupingBy
, partitioningBy
๋ฑ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋๋ฐ, ์ฑ
์ ๋ณธ๋ฌธ์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
Last updated
Was this helpful?