Stream<InputClass>
-> Stream<OutPutClass>
๋จ์ํ stream์ ํ์
์ ๋ฐ๊ฟ์ฃผ๋ ์ฐ์ฐ์ ํด์ค๋ค.
์๋ฅผ ๋ค์ด ํ์ Stream(๋ฐฐ์ด)์ด ์๋ค๊ณ ํ๊ณ ์ด ๋ ํ์์ ๋์ด์ ๋ฐฐ์ด๋ก ๋ณํํ๊ณ ์ถ์ดํ๋ค ๊ทธ๋ ๋ค๋ฉด
Stream<Member>
-> Stream<Integer>
๋ก ๋ณํ์ด ๋ ๊ฒ์ด๋ค.
List<Member> members = Arrays.asList(
new Member("Alice", 25),
new Member("Bob", 30),
new Member("Charlie", 28)
);
List<Integer> ages = members.stream()
.map(Member::getAge) // ๋๋ .map(m -> m.getAge())
.collect(Collectors.toList());
System.out.println(ages); // [25, 30, 28]
์ด๋ map.distinct()
map.sorted
๊ฐ์ ๋ฉ์๋๋ก ์ ๋ ฌ ๋ฐ ์ค๋ณต์ ๊ฑฐ๋ ๊ฐ๋ฅํ๋ค.
List<Member> members = Arrays.asList(
new Member("Alice", 25),
new Member("Bob", 30),
new Member("Charlie", 28),
new Member("David", 30) // ์ค๋ณต๋ ๋์ด
);
// ๋์ด๋ง ์ถ์ถํด์ ์ค๋ณต ์ ๊ฑฐ + ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
List<Integer> sortedDistinctAges = members.stream()
.map(Member::getAge) // Stream<Integer>
.distinct() // ์ค๋ณต ์ ๊ฑฐ
.sorted() // ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
.collect(Collectors.toList());
System.out.println(sortedDistinctAges); // ์ถ๋ ฅ: [25, 28, 30]
Stream<Stream<OutPutClass>>
โ Stream<OutPutClass>
์ค์ฒฉ๋ ์คํธ๋ฆผ ๊ตฌ์กฐ๋ฅผ ํํํ(Flatten)ํ์ฌ ํ๋์ ์คํธ๋ฆผ์ผ๋ก ๋ง๋ ๋ค.
์ฆ, List<List<String>>
โ List<String>
Stream<List<String>>
โ Stream<String>
์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ํผ์น ๋ ์ฌ์ฉ๋๋ค.
st<Member> members = Arrays.asList(
new Member("Alice", Arrays.asList("Reading", "Traveling")),
new Member("Bob", Arrays.asList("Cooking", "Gaming")),
new Member("Charlie", Arrays.asList("Traveling", "Music"))
);
// ๋ชจ๋ ํ์์ ์ทจ๋ฏธ๋ฅผ ํ๋์ ์คํธ๋ฆผ์ผ๋ก ํํํ
List<String> allHobbies = members.stream()
.flatMap(member -> member.getHobbies().stream()) // Stream<String>
.distinct() // ์ค๋ณต ์ ๊ฑฐ
.sorted() // ์ ๋ ฌ
.collect(Collectors.toList());
System.out.println(allHobbies); // ์ถ๋ ฅ: [Cooking, Gaming, Music, Reading, Traveling]
๋ฉ์๋ | ์ค๋ช |
---|---|
map() | ์์๋ฅผ ๋ณํ (1:1 ๋งคํ) |
flatMap() | ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ฅผ ํผ์ณ์ ํํํ (1:N โ 1:1 ๋งคํ) |