Collections Średniozaawansowany

Oblicz dwa agregaty w jednym przebiegu strumienia.

✕ 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
    )
);
Widzisz problem z tym kodem? Daj nam znać.

Jeden przebieg

Przetwarzasz strumień raz zamiast dwa razy.

🧩

Kompozycyjność

Możesz połączyć dowolne dwa kolektory funkcją scalającą.

🔒

Niemutowalny wynik

Wynik można od razu scalić do rekordu lub obiektu wartości.

Stare podejście
Dwa przebiegi
Nowoczesne podejście
teeing()
Od JDK
12
Poziom trudności
Średniozaawansowany
Collectors.teeing()
Dostępne

Szeroko dostępne od JDK 12 (marzec 2019)

Collectors.teeing() przekazuje każdy element do dwóch kolektorów downstream i scala wyniki. Dzięki temu nie trzeba przetwarzać danych dwa razy ani używać mutowalnego akumulatora.

Udostępnij 𝕏 🦋 in