Java 8 Stream
์๋ ํ์ธ์. ์ค๋์ Java 8์ ๊ธฐ๋ฅ ์ค ํ๋์ธ Stream์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. Stream์ ๋ฐฐ์ด, List๋ฑ์ ์์๋ค์ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ Class๋ก์จ ๊ธฐ์กด์ ๋ฐฐ์ด์ฒ๋ฆฌ๋ฅผ ๊ฐ๋จํ๊ฒ ํด์ฃผ๋ฉฐ, functional style๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๋ ฌ์ฒ๋ฆฌ Optional ๋ฑ ๋ค์ํ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋๋ก ์ง์ํด์ค๋๋ค.
1. ์์์ ์ถ๋ ฅ : forEach() 2. ์์์ ์๋ชจ : reduce() 3. ์์์ ๊ฒ์ : findFirst(), findAny() 4. ์์์ ๊ฒ์ฌ : anyMatch(), allMatch(), noneMatch() 5. ์์์ ํต๊ณ : count(), min(), max() 6. ์์์ ์ฐ์ฐ : sum(), average() 7. ์์์ ์์ง : collect()
Stream ์์ฑ
Stream์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Stream์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. collection ๋๋ ๋ฐฐ์ด์ ์ด์ฉํด์, ๋๋ ์์ฒด์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ์๋์ ๊ฐ์ด ๋ง์ด์ฃ .
Stream์ ๋ฉํฐ ์ค๋ ๋ฉ
Stream API๋ ๊ฐ๋จํ๊ฒ multithreading์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก parallelStream() ๋ฉ์๋๋ฅผ ์ง์ํด์ฃผ๊ณ ์์ต๋๋ค. ์ฌ์ฉ๋ฐฉ๋ฒ์ ์๋นํ ํธํ๋๋ค๋ง ์ด๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ ๋ด๋ถ์ ๋ก์ง์ ์๊ณ ์์ด์ผํฉ๋๋ค. ๊ทธ ๋ด์ฉ์ ์ด ๋งํฌ๋ฅผ ํ์ธํด ์ฃผ์๊ธฐ๋ฐ๋๋๋ค. [java8] ๋ณ๋ ฌ Stream ๊ทธ๋ ์ง ์์ผ๋ฉด ์ํ์ง ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
Stream Operations
์ผ๋ฐ์ ์ผ๋ก Stream์ 2๊ฐ์ง ํํ๋ก ๋๋ ์ ์์ต๋๋ค.
intermediate operations
return Stream
terminal operations
return ํน์ ํ type์ ๊ฐ
์ด๋ฐ ํํ๋ฅผ ๋๋ฏ๋ก intermediate operations๋ฅผ ํตํด์ chainํํ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์๋ ์์ ๋ฅผ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์๋ฅผ ์ค๋ช
ํ๋ฉด ์ ์ผ ๋จผ์ String ArrayList๋ฅผ Stream์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ distinct() ๋ฉ์๋๋ฅผ ํตํด ์ค๋ณต๋๋ ๊ฐ์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ distinct()์ ์ํด์ ๋ฐํ๋๋ ๊ฐ์ Stream<String>
์
๋๋ค. ์ฆ, ์ฌ์ฉ์๋ ํ๋ฒ๋ Stream
์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๋ง์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ count()๋ Stream์ ๋ค์ด์๋ ์๋ฅผ long type์ผ๋ก ๋ฆฌํดํฉ๋๋ค.
์ด๋ฐ์์ผ๋ก 2๊ฐ์ง์ ์ผ์ 1๊ฐ์ line์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ค๋ ์ฌ์ค์ ์๊ฒ๋์์ต๋๋ค. Stream์ ์ด์ฉํ๋ฉด ์ฌ๋ฌ๊ฐ์ง ์ผ์ ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๊ฒ๋์ด ๊ฐ๋ตํ ์ํฌ ์ ์์ต๋๋ค.
Stream์ ์ง์ํ๋ ์ ์ด
Stream์ด ๊ฐ๋ตํ ์ํฌ ์ ์๋ค๋ ์ฌ์ค์ ์๊ฒ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ Stream์์ ์ง์ํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ชจ๋ ์์ ๋ ์๋์ List๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
์ํ
Stream API๋ for, for-each, while loop๋ฅผ ๋์ ํ ์ ์์ต๋๋ค. ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋ง์ด์ฃ .
์ฌ์ค stream() method์ ์ํ์ด๋ผ๋ ๊ฐ๋ ์ด ๋ค์ด๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ์์๊ฐ์ด ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ ์ํ์ ๋ํด์ ํน์ ๋ถ์๋ฅผ ํ์ธํ๋ ์์ผ๋ก ์ฌ์ฉํ๋๊ฒ ์ข์ต๋๋ค. ์๋์ ๊ฐ์ด ๋ง์ด์ฃ .
ํํฐ๋ง
filter() ๋ฉ์๋๋ Stream์์ ํน์ ํ ๋ด์ฉ๋ง ํต๊ณผ์์ผ ํ์ดํ๋ผ์ธ์ ํ์ฑํ ์ ์๋๋ก ํด์ค๋๋ค.
์ด๋ ๊ฒ ๋ฐํ๋ stream์ ์์๋ก๋ "b" ํ๋๋ง์ ๋จ๊ธฐ๊ณ ๋ชจ๋ filtering๋์ด ์ฌ๋ผ์ก์์ ํ์ธํ ์ ์์ต๋๋ค. ๋ง์ฝ filtering ๋ฉ์๋๋ฅผ ์ปค์คํฐ๋ง์ด์ง ํ๊ณ ์ถ๋ค๋ฉด ๋ฉ์๋๋ฅผ ๋ง๋ค ๋ return ๊ฐ์ boolean์ด๋ผ๋ ๊ท์น์ ์ง์ผ์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ํน์ lambda์์ ๋ํด์ ์ ๋ชจ๋ฅด์๊ฒ ๋ค๋ฉด ์ ์ ์ด์ ํฌ์คํฐ ๋ค์ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
๋งคํ
๋งคํ์ Stream์ ์์๋ฅผ ํน์ ํ ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์์ ์์๋ค์ ๋๋ฌธ์๋ก ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ์๋์๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ปค์คํฐ๋ง์ด์ง์ ํ๊ณ ์ถ๋ค๋ฉด ๋ฉ์๋๋ฅผ ์ ์ํ ์ ๊ฐ์ฒด์ ๋ฐํ๊ฐ์ ๊ฐ์ง๋ฉด ๋ฉ๋๋ค.
์ค๋ณต์ ๊ฑฐ
reduce() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ณต์ผ๋ก ์ ์ด์ผํ๋ ์ฐ์ฐ์ ํ๋ฒ์ ํ ์ ์์ต๋๋ค.
์กฐํฉ
collection() ๋ฉ์๋๋ Stream์ ๋ค์ List, Map ๋ฑ ๋ค์ํ ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์๊ณ ์๋ Collection, Object๋ก ๋ณํํด ์ค๋๋ค.
resultList์๋ stream์ฐ์ฐ์ ํตํด ๋์จ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค.
๋ง๋ฌด๋ฆฌ
์ ๊ฐ์ธ์ ์ธ ๊ธฐ์ค์์๋ Stream์ด์ผ ๋ง๋ก Java 8์์ ์ถ๊ตฌํ๋ ๊ฐ๊ฒฐ์ฑ์ ๋ฌ์ฑํ๊ธฐ์ํ ์ต๊ณ ์ ๋ฌด๊ธฐ๊ฐ ์๋๊น ์๊ฐํฉ๋๋ค. lambda์์ ์ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ต์ฅํ์ง๋ง ์ด๋ฅผ ์ด์ฉํ์ฌ Stream๊น์ง ์์ ๋กญ๊ฒ ์ฌ์ฉ ํ ์ ์๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ํญ์ ์ง๋ฃจํ๊ฒ ์์ญ์ค ์ฉ ์ผ๋ ๋ด์ฉ์ 1์ค, 2์ค๋ก ์ค์ฌ๋ฒ๋ฆด ์ ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
ํด๋น ๋ฌธ์๋ ์๋ ์ฐธ์กฐ๋ฌธ์๋ฅผ ํตํด ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด ์ฌ๊ฐ๊ณตํ์ต๋๋ค.
๋ํ์ ์ธ ์ต์ข
์ฐ์ฐ ๋ฉ์๋
์คํธ๋ฆผ API์์ ์ฌ์ฉํ ์ ์๋ ๋ํ์ ์ธ ์ต์ข ์ฐ์ฐ์ ์ํ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฉ์๋
์ค๋ช
void forEach(Consumer<? super T> action)
์คํธ๋ฆผ์ ๊ฐ ์์์ ๋ํด ํด๋น ์์๋ฅผ ์๋ชจํ์ฌ ๋ช ์๋ ๋์์ ์ํํจ.
Optional<T> reduce(BinaryOperator<T> accumulator)
T reduce(T identity, BinaryOperator<T> accumulator)
์ฒ์ ๋ ์์๋ฅผ ๊ฐ์ง๊ณ ์ฐ์ฐ์ ์ํํ ๋ค, ๊ทธ ๊ฒฐ๊ณผ์ ๋ค์ ์์๋ฅผ ๊ฐ์ง๊ณ ๋๋ค์ ์ฐ์ฐ์ ์ํํจ. ์ด๋ฐ ์์ผ๋ก ํด๋น ์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ ์๋ชจํ์ฌ ์ฐ์ฐ์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํจ.
Optional<T> findFirst()
Optional<T> findAny()
ํด๋น ์คํธ๋ฆผ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฐธ์กฐํ๋ Optional ๊ฐ์ฒด๋ฅผ ๋ฐํํจ.
(findAny() ๋ฉ์๋๋ ๋ณ๋ ฌ ์คํธ๋ฆผ์ผ ๋ ์ฌ์ฉํจ)
boolean anyMatch(Predicate<? super T> predicate)
ํด๋น ์คํธ๋ฆผ์ ์ผ๋ถ ์์๊ฐ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ ๊ฒฝ์ฐ์ true๋ฅผ ๋ฐํํจ.
boolean allMatch(Predicate<? super T> predicate)
ํด๋น ์คํธ๋ฆผ์ ๋ชจ๋ ์์๊ฐ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ ๊ฒฝ์ฐ์ true๋ฅผ ๋ฐํํจ.
boolean noneMatch(Predicate<? super T> predicate)
ํด๋น ์คํธ๋ฆผ์ ๋ชจ๋ ์์๊ฐ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ ๊ฒฝ์ฐ์ true๋ฅผ ๋ฐํํจ.
long count()
ํด๋น ์คํธ๋ฆผ์ ์์์ ๊ฐ์๋ฅผ ๋ฐํํจ.
Optional<T> max(Comparator<? super T> comparator)
ํด๋น ์คํธ๋ฆผ์ ์์ ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ์ง๋ ์์๋ฅผ ์ฐธ์กฐํ๋ Optional ๊ฐ์ฒด๋ฅผ ๋ฐํํจ.
Optional<T> min(Comparator<? super T> comparator)
ํด๋น ์คํธ๋ฆผ์ ์์ ์ค์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ์์๋ฅผ ์ฐธ์กฐํ๋ Optional ๊ฐ์ฒด๋ฅผ ๋ฐํํจ.
T sum()
ํด๋น ์คํธ๋ฆผ์ ๋ชจ๋ ์์์ ๋ํด ํฉ์ ๊ตฌํ์ฌ ๋ฐํํจ.
Optional<T> average()
ํด๋น ์คํธ๋ฆผ์ ๋ชจ๋ ์์์ ๋ํด ํ๊ท ๊ฐ์ ๊ตฌํ์ฌ ๋ฐํํจ.
<R,A> R collect(Collector<? super T,A,R> collector)
์ธ์๋ก ์ ๋ฌ๋๋ Collectors ๊ฐ์ฒด์ ๊ตฌํ๋ ๋ฐฉ๋ฒ๋๋ก ์คํธ๋ฆผ์ ์์๋ฅผ ์์งํจ.
์ฐธ์กฐ
Last updated
Was this helpful?