์ด์ ์๋ ๋ฐฐ์ด ๋๋ ์ปฌ๋ ์
์ธ์คํด์ค๋ฅผ ๋ค๋ฃฐ ๋ for๋ฌธ์ ํ์ฉํ์ฌ ์์๋ฅผ ํ๋์ฉ ๊บผ๋ด์ผ ํ๋ค. ํ์ง๋ง ๋ก์ง์ด ๋ณต์กํด์ง์๋ก ์ฝ๋์ ์์ด ๋ง์์ง๊ณ , ๋ฃจํ๋ฅผ ์ฌ๋ฌ ๋ฒ ๋๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ์๋ค. ์ด์ ์๋ฐ๋ 8 ๋ฒ์ ์์ Stream์ด๋ผ๋ api๋ฅผ ์๋ก ๋ด๋์๋ค.
Stream์ ๊ฐ๋
์ฑ, ๋ณ๋ ฌ ์ฒ๋ฆฌ, ์ง์ฐ ํ๊ฐ, ํจ์ ๊ตฌ์ฑ ๋ฑ ์ฌ๋ฌ ์ฅ์ ์ด ์๋ค.
Stream์ ๋ฐ์ดํฐ์ ํ๋ฆ์ด๋ค. ์ปฌ๋ ์ ์ธ์คํด์ค์ ํจ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์กฐํฉํด์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ๊ณ ๊ฐ๊ณต๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. ์ฆ ๋ก์ง์ ํจ์ํ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. Stream์ ๋ฐฉ์์ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋๋ ์ ์๋ค
- ์์ฑํ๊ธฐ : ์คํธ๋ฆผ ์ธ์คํด์ค ์์ฑ
- ๊ฐ๊ณตํ๊ธฐ : ํํฐ๋ง(filtering) ๋ฐ ๋งตํ(mapping) ๋ฑ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๊ฐ๋ ์ค๊ฐ ์์ (intermediate operations)
- ๊ฒฐ๊ณผ ๋ง๋ค๊ธฐ : ์ต์ข ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ด๋ ์์ (terminal operations)
List<Integer> numbers = new ArrayList<>();
// ์คํธ๋ฆผ
numbers.stream() // 1. ์์ฑํ๊ธฐ
.filter(i -> i > 30) // 2. ๊ฐ๊ณตํ๊ธฐ
.map(LottoNumbers::New);
.forEach(i -> System.out.println(i)); // 3. ๊ฒฐ๊ณผ ๋ง๋ค๊ธฐ