Skip to content Skip to sidebar Skip to footer

How Can I Group Values Of List In Java Using Lambda Like We Do In Python

I want to group values of a map based on the key. Let's say Map map1 = new TreeMap(); map1.put('D', 3); map1.put('B', 2); map1.put('C',

Solution 1:

If I understand well, you want to group the identical key set of the maps you added in the last map associated with the original key.

importstatic java.util.stream.Collectors.groupingBy;
importstatic java.util.stream.Collectors.mapping;
importstatic java.util.stream.Collectors.toList;

...

Map<Set<String>, List<Integer>> newMap = 
    map.entrySet()
       .stream()
       .collect(groupingBy(e -> e.getValue().keySet(), 
                           mapping(Map.Entry::getKey, toList())));

From the last map, you get the stream of entries (which is a Stream<Entry<Integer, Map<String, Integer>>). There you group the entries by the key set of their map's values.

Then you map the values of the resulting map using a downstream collector, which collects the keys of the original entries in a List<Integer>.

Output:

{[A, B, C]=[2, 3], [B, C, D]=[1]}

Post a Comment for "How Can I Group Values Of List In Java Using Lambda Like We Do In Python"