Stream.mapMulti()
중간 스트림을 생성하지 않고 입력당 0개 이상의 요소를 방출합니다.
코드 비교
✕ Java 8
stream.flatMap(order ->
order.items().stream()
.map(item -> new OrderItem(
order.id(), item)
)
);
✓ Java 16+
stream.<OrderItem>mapMulti(
(order, downstream) -> {
for (var item : order.items())
downstream.accept(
new OrderItem(order.id(), item));
}
);
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
할당 감소
요소당 중간 Stream이 생성되지 않습니다.
명령형 스타일
루프와 조건문을 직접 사용합니다.
유연함
완전한 제어로 0개, 1개, 또는 여러 개의 요소를 방출합니다.
이전 방식
flatMap + 리스트
모던 방식
mapMulti()
JDK 버전
16
난이도
중급
JDK 지원
Stream.mapMulti()
사용 가능
JDK 16 (2021년 3월) 이후 널리 사용 가능
동작 원리
mapMulti()는 각 요소마다 Stream을 생성하지 않는 flatMap의 명령형 대안입니다. 필터링이나 복잡한 조건부 확장에 더 효율적입니다.
관련 문서