Collections Средний

Вычисление двух агрегаций за один проход по потоку.

✕ 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
    )
);
Заметили проблему в этом коде? Сообщите нам.

Один проход

Обработать поток один раз вместо двух.

🧩

Комбинируемый

Соединить два произвольных Collector с функцией слияния.

🔒

Неизменяемый результат

Сразу объединить в Record или Value-Object.

Старый подход
Два прохода
Современный подход
teeing()
Начиная с JDK
12
Сложность
Средний
Collectors.teeing()
Доступно

Широко доступно начиная с JDK 12 (март 2019)

Collectors.teeing() направляет каждый элемент в два дочерних Collector и объединяет результаты. Это позволяет избежать двукратного обхода данных или использования изменяемого аккумулятора.