2025๋ 3์ 20์ผ
์คํธ๋ฆผ(Stream) API๋ ์๋ฐ์ ์ปฌ๋ ์
(List, Set, Map) ๋ฐ ๋ฐฐ์ด์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ์ง์ํ๋ ๊ธฐ๋ฅ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ์ ๊ณตํ๋ค.
.parallelStream()
์ ์ฌ์ฉํ๋ฉด ๋ฉํฐ์ฝ์ด CPU์์ ๋ณ๋ ฌ ์ฐ์ฐ ๊ฐ๋ฅ. flatMap()
- ๋ค์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋จ์ผ ๋ฆฌ์คํธ๋ก ๋ณํ (C02FlatMap.java
)๐ก ์ค์ฒฉ๋ ๋ฆฌ์คํธ์ ์์๋ฅผ ํผ์ณ์ ํ๋์ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ ๋ ์ฌ์ฉ๋จ.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class C02FlatMap {
public static void main(String[] args) {
// ์ค์ฒฉ ๋ฆฌ์คํธ ์์ฑ
List<List<Integer>> numbers = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
// flatMap์ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ ํํํ
List<Integer> list = numbers.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(numbers); // ์๋ณธ ์ค์ฒฉ ๋ฆฌ์คํธ ์ถ๋ ฅ
System.out.println(list); // ํํํ๋ ๋ฆฌ์คํธ ์ถ๋ ฅ
}
}
๐น ์ถ๋ ฅ ๊ฒฐ๊ณผ
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
distinct()
- ์ค๋ณต ์ ๊ฑฐ (C03Distinct.java
)๐ก ๋ฆฌ์คํธ์์ ์ค๋ณต๋ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ์ ์ผํ ์์๋ง ํฌํจ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐํํจ.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class C03Distinct {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 5);
System.out.println("์๋ณธ ๋ฆฌ์คํธ: " + list);
// ์ค๋ณต ์ ๊ฑฐ
List<Integer> distinctedList = list.stream()
.distinct()
.collect(Collectors.toList());
System.out.println("์ค๋ณต ์ ๊ฑฐ ๋ฆฌ์คํธ: " + distinctedList);
}
}
๐น ์ถ๋ ฅ ๊ฒฐ๊ณผ
์๋ณธ ๋ฆฌ์คํธ: [1, 2, 2, 3, 3, 3, 4, 5, 5]
์ค๋ณต ์ ๊ฑฐ ๋ฆฌ์คํธ: [1, 2, 3, 4, 5]
sorted()
- ์ ๋ ฌ (C04Sorted.java
)๐ก ๋ฆฌ์คํธ ์์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ ์ฌ์ฉ๋จ.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class C04Sorted {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 4);
// ์ ๋ ฌ๋ ๋ฆฌ์คํธ ์์ฑ
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());
System.out.println("์ ๋ ฌ๋ ๋ฆฌ์คํธ: " + sortedNumbers);
}
}
๐น ์ถ๋ ฅ ๊ฒฐ๊ณผ
์ ๋ ฌ๋ ๋ฆฌ์คํธ: [1, 2, 4, 5, 8]
limit()
- ํน์ ๊ฐ์๋ง ์ถ๋ ฅ (C05Limited.java
)๐ก ๋ฆฌ์คํธ์ ์ฒ์ N๊ฐ์ ์์๋ง ์ ํํ์ฌ ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๋ฐํํจ.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class C05Limited {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// ์ฒ์ 3๊ฐ์ ์์๋ง ์ ํ
List<Integer> limitedNumbers = numbers.stream()
.limit(3)
.collect(Collectors.toList());
System.out.println("์ ํ๋ ๋ฆฌ์คํธ: " + limitedNumbers);
}
}
๐น ์ถ๋ ฅ ๊ฒฐ๊ณผ
์ ํ๋ ๋ฆฌ์คํธ: [1, 2, 3]
skip()
- ์ฒ์ N๊ฐ ๊ฑด๋๋ฐ๊ธฐ (C06Skip.java
)๐ก ์์ N๊ฐ์ ์์๋ฅผ ์ ์ธํ๊ณ ๋๋จธ์ง ์์๋ง ๋ฆฌ์คํธ๋ก ๋ฐํํจ.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class C06Skip {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// ์ฒ์ 2๊ฐ ์์ ๊ฑด๋๋ฐ๊ธฐ
List<Integer> skippedNumbers = numbers.stream()
.skip(2)
.collect(Collectors.toList());
System.out.println("๊ฑด๋๋ด ๋ฆฌ์คํธ: " + skippedNumbers);
}
}
๐น ์ถ๋ ฅ ๊ฒฐ๊ณผ
๊ฑด๋๋ด ๋ฆฌ์คํธ: [3, 4, 5]
C07์ต์ข
์ฐ์ฐ.java
)๐ก ์คํธ๋ฆผ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ ํ ์ต์ข ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์ฐ์ฐ.
๋ฉ์๋ | ์ค๋ช |
---|---|
forEach() | ๊ฐ ์์๋ฅผ ์ํํ๋ฉฐ ์คํ |
collect() | ๊ฒฐ๊ณผ๋ฅผ ์ปฌ๋ ์ (List, Set)์ผ๋ก ๋ณํ |
reduce() | ๋ชจ๋ ์์๋ฅผ ํ๋์ ๊ฐ์ผ๋ก ๊ฒฐํฉ |
min() | ์ต์๊ฐ ๋ฐํ |
max() | ์ต๋๊ฐ ๋ฐํ |
count() | ์์ ๊ฐ์ ๋ฐํ |
anyMatch() | ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๊ฐ ์๋์ง ํ์ธ |
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.Comparator;
public class C07์ต์ข
์ฐ์ฐ {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 4);
// ์ต์๊ฐ
Optional<Integer> minNumber = numbers.stream()
.min(Comparator.naturalOrder());
System.out.println("์ต์๊ฐ: " + minNumber.orElse(0));
// ์ต๋๊ฐ
Optional<Integer> maxNumber = numbers.stream()
.max(Comparator.naturalOrder());
System.out.println("์ต๋๊ฐ: " + maxNumber.orElse(0));
// ์ด ๊ฐ์
long count = numbers.stream().count();
System.out.println("๊ฐ์: " + count);
}
}
flatMap()
โ ์ค์ฒฉ ๋ฆฌ์คํธ๋ฅผ ๋จ์ผ ๋ฆฌ์คํธ๋ก ๋ณํ distinct()
โ ์ค๋ณต ์ ๊ฑฐ sorted()
โ ์ ๋ ฌ limit()
โ ์ฒ์ N๊ฐ ์ ํ skip()
โ ์ฒ์ N๊ฐ ์ ์ธ min()
, max()
, count()
, reduce()
) ํ์ฉ