Grouping Java HashMap keys by their values
hashmap, java
Solution
With Java8 streams
Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(k -> map.get(k)));
Output
{1=[E], 2=[C], 3=[A, F], 4=[B, D]}
using method ref
Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(map::get));
to get the keys is sorted way
Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(map::get, TreeMap::new, Collectors.toList()));
In Java7 and below
Map<Integer, List<String>> valuesMap = new HashMap<>();
for (String key : map.keySet()) {
Integer val = map.get(key);
if (valuesMap.get(val) == null) {
List<String> values = new ArrayList<>();
values.add(key);
valuesMap.put(val, values);
} else {
valuesMap.get(val).add(key);
}
}
output
{1=[E], 2=[C], 3=[A, F], 4=[B, D]}
Problem
Suppose I have this HashMap: ``` (key: value) A: 3 B: 4 C: 2 D: 4 E: 1 F: 3 ``` and I want to convert it to this HashMap: ``` 1: {"E"} 2: {"C"} 3: {"A", "F"} 4: {"B", "D"} ``` How do I go about doing this?