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
'JAVA의 가장 기본이 되는 내용' 카테고리의 다른 글
Stream API - 컬렉터, 다운 스트림 컬렉터 (0) | 2025.03.31 |
---|---|
기본형 특화 스트림(IntStream 등) (0) | 2025.03.31 |
람다 vs 익명 클래스 (0) | 2025.03.30 |
람다가 필요한 이유 (0) | 2025.03.28 |
Lombok은 어떻게 동작하는걸까? (0) | 2024.12.01 |