자바 스트림(Stream)의 중간 연산은 스트림을 변환하거나 필터링하고, 원소들에게 변형을 가할 수 있는 연산입니다. 중간 연산은 스트림을 리턴하므로, 여러 중간 연산을 연결하여 복잡한 처리를 수행할 수 있습니다. 아래는 주요한 중간 연산에 대한 설명입니다.
1. filter(Predicate<T> predicate)
조건에 맞는 요소만을 필터링합니다.
List<String> fruits = Arrays.asList("apple", "banana", "orange", "kiwi");
// 길이가 6 이상인 과일만 필터링
List<String> result = fruits.stream()
.filter(fruit -> fruit.length() >= 6)
.collect(Collectors.toList());
2. map(Function<T, R> mapper)
각 요소를 다른 요소로 변환합니다.
List<String> fruits = Arrays.asList("apple", "banana", "orange");
// 각 과일의 길이로 매핑
List<Integer> lengths = fruits.stream()
.map(String::length)
.collect(Collectors.toList());
3. flatMap(Function<T, Stream<R>> mapper)
각 요소를 여러 요소로 확장한 후 하나의 스트림으로 평면화합니다.
List<List<Integer>> numbers = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
// 모든 요소를 하나의 리스트로 평면화
List<Integer> flatList = numbers.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
4. distinct()
중복된 요소를 제거합니다.
List<Integer> numbers = Arrays.asList(1, 2, 3, 1, 2, 3, 4, 5);
// 중복 요소 제거
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
5. sorted() 및 sorted(Comparator<T> comparator)
요소를 정렬합니다. Comparator를 제공하지 않으면 요소의 자연 순서로 정렬됩니다.
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5);
// 오름차순 정렬
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());
// 내림차순 정렬
List<Integer> reverseSortedNumbers = numbers.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
6. peek(Consumer<T> action)
각 요소에 대해 특정 동작을 수행하며 스트림을 반환합니다. 주로 디버깅 용도로 사용됩니다.
List<String> fruits = Arrays.asList("apple", "banana", "orange");
// 각 과일을 출력하면서 길이로 매핑
List<Integer> lengths = fruits.stream()
.peek(System.out::println)
.map(String::length)
.collect(Collectors.toList());
이 외에도 다양한 중간 연산이 있으며, 이를 조합하여 원하는 데이터 처리를 수행할 수 있습니다. 중간 연산은 최종 연산이 호출되기 전까지는 실제로 수행되지 않습니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 OptionalInt (0) | 2023.11.25 |
---|---|
자바 Optional〈T〉 (0) | 2023.11.23 |
자바 스트림 만들기 (0) | 2023.11.23 |
자바 스트림(stream) (0) | 2023.11.22 |
자바 Predicate의 결합 (0) | 2023.11.22 |