1. ์์ ์์ง
Stream
๋ง์ง๋ง์ผ๋ก ํด๋์ค ์์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ฉ์๋์ธ ๋ฉ์๋์ ๋๋ฌํ์ต๋๋ค collect()
. ์คํธ๋ฆผ์์ ์น์ํ ์ปฌ๋ ์
( List<T>
, ๋ฑ) ์ผ๋ก ์ด๋ํ๋ Set<T>
๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.Map<T, R>
์ด collect()
๋ฉ์๋๋ ํน์ collector
๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ๊ฐ์ฒด๋ ์คํธ๋ฆผ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํน์ ์ข
๋ฅ์ ์ปฌ๋ ์
์ผ๋ก ๋ณํํ ๋ค์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ง ๋ฉ์๋ ์์ฒด๊ฐ ์ด ์ปฌ๋ ์
์ ๋ฐํํฉ๋๋ค.
์ด ๋ชจ๋ ์์
์ ๋ค์ ๋งค๋๋ฌ์ด ๋ฐฉ์์ผ๋ก ์ํ๋ฉ๋๋ค. collector
๊ฐ์ฒด์ ์ ํ์ ์
๋๋ค Collector<T, A, R>
. ๋ณด์๋ค์ํผ ์ธ ๊ฐ์ง ์ ํ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ๋ง์ง๋ง ์ ํ ๋งค๊ฐ๋ณ์( R
)๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๊ฐ์ ์ ํ์
๋๋ค List<T>
. ์ด๋ ์ปดํ์ผ๋ฌ๊ฐ ์ด ์ ํ์ ์ฌ์ฉํ์ฌ ๋ฉ์๋ ์์ฒด์ ๋ํ ์ฌ๋ฐ๋ฅธ ๋ฐํ ์ ํ์ ๊ฒฐ์ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค collect()
.
๋๋ฌด ํท๊ฐ๋ฆฌ์ง ์์ผ์
จ์ผ๋ฉด ํฉ๋๋ค. ์ด์จ๋ Collector ๊ฐ์ฒด๋ฅผ ์ง์ ๋ง๋ค ํ์๋ ์์ต๋๋ค. ํด๋์ค ์ ์ ์ ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ธฐ์ฑํ์ด๋ฉด Collectors
์ถฉ๋ถํฉ๋๋ค.
์์ง๊ฐ ํด๋์ค
์ด Collectors
ํด๋์ค์๋ ์ด๋ฏธ ๋ง๋ค์ด์ง ์์ง๊ธฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ์ฌ๋ฌ ๊ฐ์ง ์ ์ ๋ฉ์๋๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ๋ค์ ๊ณ ๋ คํ ๊ฒ์
๋๋ค.
|
์คํธ๋ฆผ์ ๋ฆฌ์คํธ๋ก ๋ณํํ๋ ๊ฐ์ฒด( List<T> ) |
|
์คํธ๋ฆผ์ ์งํฉ์ผ๋ก ๋ณํํ๋ ๊ฐ์ฒด( Set<T> ) |
|
Map<K, V> ์คํธ๋ฆผ์ ๋งต( ) ์ผ๋ก ๋ณํํ๋ ๊ฐ์ฒด |
|
์คํธ๋ฆผ์ ์์๋ฅผ ๋จ์ผ ๋ฌธ์์ด๋ก ์ฐ๊ฒฐ |
|
๋ฌธ์์ด์ ์์๋ฅผMap<K, V> |
|
์์๋ฅผ ๊ทธ๋ฃนํํ๊ณ ๋ฐํMap<K, V> |
2. ์คํธ๋ฆผ์ ๋ชฉ๋ก์ผ๋ก ๋ณํ
๋ค์์ ์คํธ๋ฆผ์ผ๋ก ์์ ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ชฉ๋ก์ผ๋ก ๋ณํํ๋ ์ผ๋ฐ์ ์ธ ์์ ๋๋ค.
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
List<String> result = list.stream()
.filter( s -> Character.isUpperCase(s.charAt(0)) )
.collect( Collectors.toList() );
์ปฌ๋ ์ ์์ ์คํธ๋ฆผ์ ์ป์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฒซ ๋ฌธ์๊ฐ ๋๋ฌธ์์ธ ๋ฌธ์์ด๋ง ์ ์งํ์ฌ ์ ์คํธ๋ฆผ์ ์ป์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ์คํธ๋ฆผ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ปฌ๋ ์ ์ผ๋ก ์์ง๋ ๋ค์ ๋ฐํ๋ฉ๋๋ค.
3. ์คํธ๋ฆผ์ ์งํฉ์ผ๋ก ๋ณํ
๋ค์์ ์คํธ๋ฆผ์ผ๋ก ์์ ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์งํฉ์ผ๋ก ๋ณํํ๋ ์ผ๋ฐ์ ์ธ ์์ ๋๋ค.
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
Set<String> result = list.stream()
.filter( s -> Character.isUpperCase(s.charAt(0)) )
.collect( Collectors.toSet() );
๋ชจ๋ ๊ฒ์ ์คํธ๋ฆผ์ ๋ก ๋ณํํ๋ ์ฝ๋์ ๋งค์ฐ ์ ์ฌํ๋ฉฐ ๋ฉ์๋ List
์์ ๋ฐํํ๋ ๋ค๋ฅธ ์์ง๊ธฐ ๊ฐ์ฒด๋ง ์ฌ์ฉํฉ๋๋ค toSet()
.
4. ์คํธ๋ฆผ์ ๋งต์ผ๋ก ๋ณํ
๊ทธ๋ฌ๋ ์คํธ๋ฆผ์ ๋งต์ผ๋ก ๋ณํํ๋ ๊ฒ์ ์กฐ๊ธ ๋ ์ด๋ ต์ต๋๋ค. Map์ ๊ฐ ํญ๋ชฉ์ ํค์ ๊ฐ์ด๋ผ๋ ๋ ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์คํธ๋ฆผ์ ๊ฐ ์์์ ๋ํ ํค์ ๊ฐ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ํ์ ํด์ผ ํฉ๋๋ค.
์:
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "a=2", "b=3", "c=4", "d==3");
Map<String, String> result = list.stream()
.map( e -> e.split("=") )
.filter( e -> e.length == 2 )
.collect( Collectors.toMap(e -> e[0], e -> e[1]) );
์ฌ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
map(...)
์ฒซ ๋ฒ์งธ ์ค์์ ๊ฐ ๋ฌธ์์ด์ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค . split ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฌธ์์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋๋ค.
๋ ๋ฒ์งธ ์ค์์๋ filter()
์ ํํ ๋ ๊ฐ์ ์์๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด๋ง ๋ฉ์๋์ ์ ๋ฌํฉ๋๋ค. ๋ฌธ์์ด d==3
์ ํํฐ์ ์ผ์นํ์ง ์๋ ์ธ ๊ฐ์ง ์์์ ๋ฐฐ์ด๋ก ๋ถํ ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ง์ง๋ง ์ค์์ ์คํธ๋ฆผ์ Map<String, String>
. ๋ฉ์๋ ์ ๋ ๊ฐ์ง ํจ์๊ฐ ์ ๋ฌ๋ฉ๋๋ค toMap()
. ์คํธ๋ฆผ์ ๊ฐ ์์์ ๋ํด ์ฒซ ๋ฒ์งธ ํจ์๋ ํค๋ฅผ ๋ฐํ ํ๊ณ ๋ ๋ฒ์งธ ํจ์๋ ๊ฐ์ ๋ฐํ ํด์ผ ํฉ๋๋ค .
๊ฐ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์("a", "b", "c")๋ ํค๊ฐ ๋๊ณ ๊ฐ ๋ฐฐ์ด์ ๋ ๋ฒ์งธ ์์("2", "3", "4")๋ ๊ฐ์ด ๋ฉ๋๋ค.
5. ์คํธ๋ฆผ์ ๋ฌธ์์ด๋ก ๋ณํ
๋ ๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ์ปฌ๋ ํฐ ๊ฐ์ฒด๋ ์ ์ํด ๋ฐํ๋ฉ๋๋ค Collectors.joining()
. ์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ String
โโ๋จ์ผ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ ์ฐ๊ฒฐํฉ๋๋ค. ์
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "a=2", "b=3", "c=4", "d==3");
String result = list.stream().collect( Collectors.joining(", ") );
GO TO FULL VERSION