1
JavaIntermediate#streams
groupingBy() classifies stream elements into a Map by a classifier function, with an optional downstream collector to further aggregate each group's values (counting, summing, mapping, etc.).
Map<Integer, List<String>> byLength = Stream.of("a","bb","cc","ddd")
.collect(Collectors.groupingBy(String::length));
// {1=[a], 2=[bb, cc], 3=[ddd]}