2022. 6. 8. 21:55ใJAVA/์๋ฐ์ ์ ์
https://hyejin.tistory.com/605
1๏ธโฃ ์คํธ๋ฆผ์ ์ต์ข ์ฐ์ฐ
์ต์ข ์ฐ์ฐ์ ์คํธ๋ฆผ์ ์์๋ฅผ ์๋ชจํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ธ๋ค. ๊ทธ๋์ ์ต์ข ์ฐ์ฐ ํ์๋ ์คํธ๋ฆผ์ด ๋ซํ๊ฒ ๋๊ณ , ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ผ์ ์ต์ข ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ ์คํธ๋ฆผ ์์์ ํฉ๊ณผ ๊ฐ์ ๋จ์ผ ๊ฐ์ด๊ฑฐ๋, ์คํธ๋ฆผ์ ์์๊ฐ ๋ด๊ธด ๋ฐฐ์ด ๋๋ ์ปฌ๋ ์ ์ผ ์ ์๋ค.
- forEach()
forEach()๋ peek()๊ณผ ๋ฌ๋ฆฌ ์คํธ๋ฆผ์ ์์๋ฅผ ์๋ชจํ๋ ์ต์ข ์ฐ์ฐ์ด๋ค.
๋ฐํ ํ์ ์ด void์ด๋ฏ๋ก ์คํธ๋ฆผ์ ์์๋ฅผ ์ถ๋ ฅํ๋ ์ฉ๋๋ก ๋ง์ด ์ฌ์ฉ๋๋ค.
- ์กฐ๊ฑด ๊ฒ์ฌ allMatch(), anyMatch(), noneMatch(), findFirst(), findAny()
์คํธ๋ฆผ์ ์์์ ๋ํด ์ง์ ๋ ์กฐ๊ฑด์ ๋ชจ๋ ์์๊ฐ ์ผ์นํ๋ ์ง, ์ผ๋ถ๊ฐ ์ผ์นํ๋์ง ์๋๋ฉด ์ด๋ค ์์๋ ์ผ์นํ์ง ์๋์ง ํ์ธํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ค์ด๋ค.
์ด ๋ฉ์๋๋ค์ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ก Predicate๋ฅผ ์๊ตฌํ๊ณ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ก boolean์ ๋ฐํํ๋ค.
์ด์ธ์๋ ์คํธ๋ฆผ์ ์์ ์ค์์ ์กฐ๊ฑด์ ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ๊ฒ์ ๋ฐํํ๋ FindFirst()๊ฐ ์๋๋ฐ ์ฃผ๋ก filter()์ ํจ๊ป ์ฌ์ฉ๋์ด ์กฐ๊ฑด์ ๋ง๋ ์คํธ๋ฆผ์ ์์๊ฐ ์๋์ง ํ์ธํ๋๋ฐ ์ฌ์ฉ๋๋ค.
๋ณ๋ ฌ ์คํธ๋ฆผ์ธ ๊ฒฝ์ฐ์๋ findAny()๋ฅผ ์ฌ์ฉํ๋ค.
- ํต๊ณ count(), sum(), average(), max(), min()
- ๋ฆฌ๋์ฑ reduce()
reduce()๋ ์คํธ๋ฆผ์ ์์๋ฅผ ์ค์ฌ๋๊ฐ๋ฉด์ ์ฐ์ฐ์ ์ํํ๊ณ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
๊ทธ๋์ ๋งค๊ฐ๋ณ์ ํ์ ์ด BinaryOperator<T>์ด๋ค. ์ฒ์ ๋ ์์๋ฅผ ๊ฐ์ง๊ณ ์ฐ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ๊ทธ ๋ค์ ์์์ ์ฐ์ฐํ๋ค.
์ด ๊ณผ์ ์์ ์คํธ๋ฆผ์ ์์๋ฅผ ํ๋์ฉ ์๋ชจํ๊ฒ ๋๋ฉฐ, ์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ ์๋ชจํ๊ฒ ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
reduce()๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. ๊ทธ์ ์ด๊ธฐ๊ฐ(identity)์ ์ด๋ค ์ฐ์ฐ(BinaryOperator)์ผ๋ก ์คํธ๋ฆผ์ ์์๋ฅผ ์ค์ฌ๋๊ฐ ๊ฒ์ธ์ง๋ง ๊ฒฐ์ ํ๋ฉด ๋๋ค.
2๏ธโฃ Collect()
collect()๋ ์คํธ๋ฆผ์ ์์๋ฅผ ์์งํ๋ ์ต์ข ์ฐ์ฐ์ผ๋ก ์์์ ๋ฐฐ์ด ๋ฆฌ๋์ฑ reducing๊ณผ ์ ์ฌํ๋ค.
collect()๊ฐ ์คํธ๋ฆผ์ ์์๋ฅผ ์์งํ๋ ค๋ฉด ์ด๋ป๊ฒ ์์งํ ๊ฒ์ธ๊ฐ์ ๋ํ ๋ฐฉ๋ฒ์ด ์ ์๋์ด ์์ด์ผ ํ๋๋ฐ, ์ด ๋ฐฉ๋ฒ์ ์ ์ํ ๊ฒ์ด ๋ฐ๋ก ์ปฌ๋ ํฐ Collector์ด๋ค.
collect() : ์คํธ๋ฆผ์ ์ต์ข ์ฐ์ฐ, ๋งค๊ฐ๋ณ์๋ก ์ปฌ๋ ํฐ๋ฅผ ํ์๋ก ํ๋ค.
Collector : ์์ง์ ํ์ํ ๋ฉ์๋๋ฅผ ์ ์ํด ๋์ ์ธํฐํ์ด์ค
Collectors : ๋ค์ํ ๊ธฐ๋ฅ์ Collector๋ฅผ ๊ตฌํํ ํด๋์ค, static๋ฉ์๋๋ก ๋ฏธ๋ฆฌ ์์ฑ๋ ์ปฌ๋ ํฐ๋ฅผ ์ ๊ณตํ๋ค.
- ์คํธ๋ฆผ์ ์ปฌ๋ ์ ๊ณผ ๋ฐฐ์ด๋ก ๋ณํ toList(), toSet(), toMap(), toCollection(), toArray()
์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ ์ปฌ๋ ์ ์ ์์งํ๋ ค๋ฉด, Collectorsํด๋์ค์ toList()์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
p- p.getRegId() ๋ key, p->p๋ ํญ๋ฑํจ์๋ก ์ ๋ ฅ๊ทธ๋๋ก ์ถ๋ ฅ ํ๋ ๊ฒ์ผ๋ก ์ด๋ฅผ value๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์คํธ๋ฆผ์ ์ ์ฅ๋ ์์๋ค์ T[] ํ์ ์ ๋ฐฐ์ด๋ก ๋ณํํ๋ ค๋ฉด toArray()๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋จ, ํด๋น ํ์ ์ ์์ฑ์ ์ฐธ์กฐ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ง์ ํด์ค์ผ ํ๋ค.
Student[] stuNames = studentStream.toArray(Student[]::new); -> O
Object[] stuNams = StudentStream.toArray(); -> O
Student[] stuNames = StudentStream.toArray(); -> X
- ํต๊ณ counting(), summingInt(), averagingInt(), maxBy(), minBy()
- ๋ฆฌ๋์ฑ reducing
- ๋ฌธ์์ด ๊ฒฐํฉ joining()
: ๋ฌธ์์ด ์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ ํ๋์ ๋ฌธ์์ด๋ก ์ฐ๊ฒฐํด์ ๋ฐํํ๋ค.
์ด๋ ์คํธ๋ฆผ์ ์์๊ฐ ๋ฌธ์์ด์ด ์๋ ๊ฒฝ์ฐ์๋ map()์ ์ด์ฉํด์ ๋จผ์ ์คํธ๋ฆผ์ ์์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด์ผ ํ๋ค.
3๏ธโฃ ๊ทธ๋ฃนํ์ ๋ถํ groupingBy(), partitioningBy()
๊ทธ๋ฃนํ๋ ์คํธ๋ฆผ์ ์์๋ฅผ ํน์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ๋ ๊ฒ์ ์๋ฏธํ๊ณ , ๋ถํ ์ ์คํธ๋ฆผ์ ์์๋ฅผ ๋๊ฐ์ง, ์ง์ ๋ ์กฐ๊ฑด์ ์ผ์นํ๋ ๊ทธ๋ฃน๊ณผ ์ผ์นํ์ง ์๋ ๊ทธ๋ฃน์ผ๋ก์ ๋ถํ ์ ์๋ฏธํ๋ค.
groupingBy()๋ ์คํธ๋ฆผ์ ์์๋ฅผ Function์ผ๋ก, partitioningBy()๋ Predicate๋ก ๋ถ๋ฅํ๋ค.
์คํธ๋ฆผ์ ๋ ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ผ ํ๋ค๋ฉด partitioningBy()๋ก ๋ถํ ํ๋๊ฒ์ด ํจ์ฌ ๋น ๋ฅด๋ค!
- partitioningBy()์ ์ํ ๋ถ๋ฅ
- groupingBy()์ ์ํ ๋ถ๋ฅ
-> ๋ง์ง๋ง์๋ ํ๋ ๋ณ๊ณผ ๋ฐ๋ณ๋ก ๊ทธ๋ฃนํํ ๋ค์์, ์ฑ์ ๊ทธ๋ฃน์ผ๋ก ๋ณํmappingํ์ฌ Set์ ์ ์ฅํ๋ค.
-> ํ๋ ๋ณ, ๋ฐ ๋ณ๋ก ๊ทธ๋ฃนํ ํ ๋ค์์, ์ฑ์ ๊ทธ๋ฃน์ผ๋ก ๋ณํmappingํ์ฌ Set์ ์ ์ฅํ๋ค.
- ์คํธ๋ฆผ ๋ณํ ๋ฉ์๋
'JAVA > ์๋ฐ์ ์ ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] 24. ์คํธ๋ฆผ์ ์ค๊ฐ์ฐ์ฐ, Optional<T>, OptionalInt (0) | 2022.06.06 |
---|---|
[JAVA] 23. ๋ฉ์๋ ์ฐธ์กฐ, ์คํธ๋ฆผ(Stream) (0) | 2022.06.05 |
[JAVA] 22. ๋๋ค์ (Lambda Expression) (0) | 2022.06.01 |
[JAVA] 21. ์ฐ๋ ๋ ์คํ ์ ์ด ๋ฉ์๋(sleep ,interrupt, stop, suspend, resume, join, yield) (0) | 2022.05.29 |
[JAVA] 20. ์ฐ๋ ๋ Thread (0) | 2022.05.22 |