Angenommen wir haben eine Collection von Einkäufen (Joghurt, Bananen, Deodorant, Äpfel, Käse, …) und wir wollen diese zusammenfassen (z.B. Milchprodukte, Früchte, …) dann können wir das wie folgt machen:
Map<String, Purchase> condensedMap = purchases.stream()
.collect(Collectors.groupingBy(Purchase::getCategory,
Collectors.collectingAndThen(Collectors.reducing(
(a,b) -> new Category(a.getCategory().name(), Math.sum(a.price(), b.price())),
Optional::get))));
List<Category> condensedList = condensedMap.values();
Inspired by Java stream merge or reduce duplicate objects