Collectors.teeing()
Calcule deux agrégations en un seul passage du stream.
Comparaison de Code
✕ 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
)
);
Un problème avec ce code ? Dites-le nous.
Pourquoi la méthode moderne gagne
Un seul passage
Traite le stream une seule fois au lieu de deux.
Composable
Combine deux collectors quelconques avec une fonction de fusion.
Résultat immutable
Fusionne directement dans un record ou un objet valeur.
Ancienne Approche
Deux passages
Approche Moderne
teeing()
Depuis JDK
12
Difficulté
Intermédiaire
Support JDK
Collectors.teeing()
Disponible
Disponible depuis JDK 12 (mars 2019)
Comment ça fonctionne
Collectors.teeing() envoie chaque élément à deux collectors aval et combine les résultats. Cela évite de parcourir les données deux fois ou d'utiliser un accumulateur mutable.
Documentation Associée