728x90
반응형
SMALL

Stream API 중 이해가 부족한 중간 연산을 정리하는 시간을 가져보자.

 

takeWhile

자바9부터 지원하는 중간 연산인데, 쉽게 말해 "어디까지 취할것인가?"에 대한 조건을 만들어낸다고 보면 된다.

System.out.println("takeWhile - Stream 데이터를 어디까지만 take 할 지 (정렬된 요소들에 대해서 사용해야 효과적)");
Stream.of(1,2,3,4,5,6,7,8,9)
        .takeWhile(n -> n < 5)
        .forEach(n -> System.out.println(n + " "));
takeWhile - Stream 데이터를 어디까지만 take 할 지 (정렬된 요소들에 대해서 사용해야 효과적)
1 
2 
3 
4
  • 위 코드에서처럼 1부터 9까지를 Stream으로 처리할 때 takeWhile(n -> n < 5)라는 중간 연산이 있으면, 5보다 작은 숫자에 대해서만 처리를 하다가 5보다 크거나 같은 값을 만나게 되면 그때 딱 이 스트림을 종료한다.
  • 정렬된 데이터에 대해서 필요할 때 사용하면 효과적일 것 같다.

 

dropWhile

이 역시 자바9부터 지원하는 중간 연산인데, 쉽게 말해 "어디까지 스킵할것인가?"에 대한 조건을 만들어낸다고 보면 된다.

System.out.println("dropWhile - Stream 데이터를 어디까지 skip 할 지 (정렬된 요소들에 대해서 사용해야 효과적)");
Stream.of(1,2,3,4,5,6,7,8,9)
        .dropWhile(n -> n < 5)
        .forEach(n -> System.out.println(n + " "));
dropWhile - Stream 데이터를 어디까지 skip 할 지 (정렬된 요소들에 대해서 사용해야 효과적)
5 
6 
7 
8 
9
  • 위 코드에서처럼 1부터 9까지 Stream으로 처리할 때 dropWhile(n -> n < 5)라는 중간 연산이 있으면, 5보다 작은 숫자에 대해서는 Skip 처리하다가 5보다 크거나 같은 값을 만나면 그때부터 쭉 진행한다.

 

FlatMap

flatMap은 각 요소를 스트림으로 변환한 뒤, 그 결과를 하나의 스트림으로 평탄화 해준다.

[
    [1, 2],
    [3, 4],
    [5, 6]
]
  • 위와 같은 리스트 안에 리스트가 있다고 가정해보자.

flatMap을 사용하면 이 데이터를 다음과 같이 쉽게 평탄화(flatten)할 수 있다.

[1,2,3,4,5,6]

 

package stream.operation;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class MapVsFlatMapMain {
    public static void main(String[] args) {
        List<List<Integer>> outer = List.of(
                List.of(1, 2),
                List.of(3, 4),
                List.of(5, 6)
        );
        System.out.println("outer = " + outer);

        // flatMap
        List<Integer> flatMapResult = outer.stream()
                .flatMap(list -> list.stream())
                .peek(System.out::println)
                .toList();
        System.out.println("flatMapResult = " + flatMapResult);
    }
}
outer = [[1, 2], [3, 4], [5, 6]]
1
2
3
4
5
6
flatMapResult = [1, 2, 3, 4, 5, 6]

 

728x90
반응형
LIST

+ Recent posts