Les Collectors terminent un stream en rassemblant ses éléments dans un résultat : toList, toSet, joining, counting, groupingBy (regroupe dans une Map), partitioningBy, summingInt, averagingDouble. Un collecteur en aval peut agréger chaque groupe.
Exemple
Map<String, Long> parVille = clients.stream()
.collect(Collectors.groupingBy(Client::ville, Collectors.counting()));