๋ชฉ์ฐจ
Stream API ๋ ?
Java 8 ์์ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก, ์ปฌ๋ ์ / ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ๋๋๋ค.
๋ฐ์ดํฐ ์๋ณธ์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ์๋ก์ด ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ค.
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
Stream API ํน์ง
- ์๋ณธ ๋ณ๊ฒฝ ์ํจ
- ํ์ดํ๋ผ์ธ ์ฐ์ฐ
- ์ง์ฐ ํ๊ฐ
Stream ๋ฉ์๋
๊ณต์ ๋ฌธ์์ ๋ค์ด๊ฐ๋ฉด ๋ ์์ธํ ๋ณผ ์ ์์ต๋๋ค.
์ค๊ฐ ์ฐ์ฐ (Intermediate Operations)
์คํธ๋ฆผ์ ๋ณํ, ํํฐ๋ง
- `filter()` : ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ง ๋ฐํ
- `map()` : ์๋ก์ด ์คํธ๋ฆผ์ ๋ฐํ
- `mapToInt()` : ์คํธ๋ฆผ์ ์์๋ฅผ int๋ก ๋ณํํ์ฌ IntStream์ ์์ฑ
- `sorted()` : ์์๋ฅผ ์ ๋ ฌํจ
- `flatMap()` : ๊ฐ ์์๋ฅผ ์คํธ๋ฆผ์ผ๋ก ๋ณํ (๋ชจ๋ ์คํธ๋ฆผ์ ํ๋๋ก ํํํ)
- `distinct()` : ์ค๋ณต๋ ์์๋ฅผ ์ ๊ฑฐ
- `limit()` : ์คํธ๋ฆผ์ ๊ธธ์ด๋ฅผ ์ ํ
- `skip()` ์คํธ๋ฆผ์ ์ฒ์ ๋ช ๊ฐ ์์๋ฅผ ๊ฑด๋๋
- `peek()` ์คํธ๋ฆผ์ ๊ฐ ์์์ ๋ํด ์์ ์ํ (๋๋ฒ๊น ์ฉ)
์ต์ข ์ฐ์ฐ (Terminal Operations)
์คํธ๋ฆผ์ ์๋นํ์ฌ ๊ฒฐ๊ณผ ์์ฑ
์ต์ข ์ฐ์ฐ์ด ํธ์ถ๋๋ฉด ์คํธ๋ฆผ์ ๋์ด์ ์ฌ์ฉ ๋ถ๊ฐ
- `forEach()` : ๊ฐ ์์์ ๋ํด ์ง์ ์์ ์ ์ํ
- `collect()` : ์์๋ฅผ ์ปฌ๋ ์ ์ด๋ ๋ค๋ฅธ ํํ๋ก ์์ง
- `reduce()` : ์์๋ฅผ ํ๋๋ก ๊ฒฐํฉํ์ฌ ์ถ์
- `count()` : ์์ ๊ฐ์๋ฅผ ๋ฐํ
- `min()` / `max()` : ์ต์๊ฐ ์ต๋๊ฐ ๋ฐํ
- `findFirst()` : ์คํธ๋ฆผ์ ์ฒซ๋ฒ์งธ ์์ ๋ฐํ
- `findAny()` : ์๋ฌด ์์๋ ๋ฐํ
- `allMatch()` / `anyMatch()` / `noneMatch()` : ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ
- `toArray()` : ์คํธ๋ฆผ ์์๋ฅผ ๋ฐฐ์ด๋ก ๋ณํ
- `orElse()` : Optional ๊ฐ์ฒด์ ๋ํด ํธ์ถ๋๋ฉฐ, ๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ฐํ (๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ๋ฌด์) , ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ ์คํธ๋ฆผ ์ฒ๋ฆฌ๋ฅผ ์ข ๋ฃ ( ๊ฐ์ ์ถ์ถํ๋ ์ต์ข ์ฐ์ฐ)
- `average()` : ์คํธ๋ฆผ์ ๋ชจ๋ ์์์ ๋ํด ํ๊ท ๊ฐ์ ๊ณ์ฐ (OptionalDouble๋ก ๋ฐํํจ!)
Stream ์์
List<String> result = stream.collect(Collectors.toList());
์คํธ๋ฆผ์ ์์๋ค์ ๋ฆฌ์คํธ๋ก ๋ณํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
stream.sorted(Comparator.reverseOrder());
๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ