Collectors.teeing()
스트림을 한 번만 순회하여 두 가지 집계를 동시에 계산합니다.
코드 비교
✕ Java 8
long count = items.stream().count();
double sum = items.stream()
.mapToDouble(Item::price)
.sum();
var result = new Stats(count, sum);
✓ Java 12+
var result = items.stream().collect(
Collectors.teeing(
Collectors.counting(),
Collectors.summingDouble(Item::price),
Stats::new
)
);
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
단일 순회
스트림을 두 번 대신 한 번만 처리합니다.
조합 가능
병합 함수로 임의의 두 컬렉터를 결합합니다.
불변 결과
레코드나 값 객체로 직접 병합합니다.
이전 방식
두 번 순회
모던 방식
teeing()
JDK 버전
12
난이도
중급
JDK 지원
Collectors.teeing()
사용 가능
JDK 12 (2019년 3월) 이후 널리 사용 가능
동작 원리
Collectors.teeing()은 각 요소를 두 개의 다운스트림 컬렉터에 전달하고 결과를 병합합니다. 데이터를 두 번 스트리밍하거나 가변 누산기를 사용하지 않아도 됩니다.
관련 문서