๐๏ธ Java Streams API์ ๋ํ ์ธํฐ๋ทฐ ์ค๋น
๐ Streams API์ ์ค๊ฐ ์ฐ์ฐ๊ณผ ์ต์ข ์ฐ์ฐ์ ์ฐจ์ด์ ์ ์ค๋ช ํด ์ฃผ์ธ์. ์ค๊ฐ ์ฐ์ฐ * ์ค๊ฐ ์ฐ์ฐ์ ํน์ง์ Lazy Execution์ ๋๋ค. ์ฆ, ์ต์ข ์ฐ์ฐ์ด ํธ์ถ๋ ๋๊น์ง ์์ ์ ์ํํ์ง ์์ต๋๋ค. * ์ค๊ฐ ์ฐ์ฐ์ ๋ฆฌํด ํ์ ์ streams์ด๋ฏ๋ก ์ถ๊ฐ๋ก ์ฐ์ฐํ ์ ์์ต๋๋ค. * ๋๋ถ๋ถ์ ์ค๊ฐ ์ฐ์ฐ์ stateless(์ํ์์) ์ ๋๋ค. filter๋ map ์ฐ์ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. * ์ค๊ฐ ์ฐ์ฐ ์ค ์ผ๋ถ๋ stateful ์ผ ์ ์์ต๋๋ค. sorted๋ distinct๊ฐ ๊ทธ ์์์ ๋๋ค. ์ต์ข ์ฐ์ฐ * ์ต์ข ์ฐ์ฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์ถํฉ๋๋ค. * ๋ฆฌํด ํ์ ์ aggregate, collection์ด๋ optional์ผ ์ ์์ต๋๋ค. * ์ต์ข ์ฐ์ฐ์ ์คํธ๋ฆผ ์ฒ๋ฆฌ๋ฅผ ์ฆ์ ์คํํฉ๋๋ค. * ์ต์ข ์ฐ์ฐ ํ์๋ ์ถ๊ฐ ์ฐ์ฐ์ ์งํํ ์ ์์ต๋๋ค. ๐ primitive streams์ ์ฉ๋์ ๋ชฉ์ ์ ์ค๋ช ํด ์ฃผ์ธ์. IntStream, DoubleStream, LongStream์ ๋ค์์ ๋ชฉ์ ์ผ๋ก ์ ๊ณต๋์์ต๋๋ค: 1. boxing๊ณผ unboxing์ ์ค๋ฒํค๋ ์ฑ๋ฅ์ ํฅ์ 2. sum, avg, max, min๊ณผ ๊ฐ์ ํน์ ํ ๋ฉ์๋๋ฅผ ์ ๊ณต 3. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ค์ ๐ forEach์ forEachOrdered์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์? forEach ๋ณ๋ ฌ ์คํธ๋ฆผ์์ ์์๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. forEachOrdered ๋ณ๋ ฌ ์คํธ๋ฆผ์์ ์์๊ฐ ๋ณด์ฅ๋ฉ๋๋ค. Sequential Stream ์์ฐจ ์คํธ๋ฆผ์์๋ ์คํธ๋ฆผ์ด ์ด๋ฏธ ์์ฐจ์ ์ด๋ฏ๋ก forEach์ forEachOrdered์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. Parallel Stream ๋ณ๋ ฌ ์คํธ๋ฆผ์์ forEach๋ ์์๋ฅผ ์ด๋ค ์์๋ก๋ ๋์์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, forEachOrdered๋ ์คํธ๋ฆผ์์ ์ ์๋ ์์๋ฅผ ์กด์คํฉ๋๋ค.