JAVA/포스팅

자바 스트림의 중간연산

짜집퍼박사(짜박) 2023. 11. 23. 00:19

자바 스트림(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