按值对Java HashMap键进行分组

按值对Java HashMap键进行分组,java,hashmap,Java,Hashmap,假设我有这个HashMap: (key: value) A: 3 B: 4 C: 2 D: 4 E: 1 F: 3 我想把它转换成这个HashMap: 1: {"E"} 2: {"C"} 3: {"A", "F"} 4: {"B", "D"} 我该怎么做呢 使用Java8流 Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(k ->

假设我有这个HashMap:

(key: value)
A: 3
B: 4
C: 2
D: 4
E: 1
F: 3
我想把它转换成这个HashMap:

1: {"E"}
2: {"C"}
3: {"A", "F"}
4: {"B", "D"}
我该怎么做呢

使用Java8流

Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(k -> map.get(k)));
使用方法ref

Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(map::get));
使用Java8流

Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(k -> map.get(k)));
使用方法ref

Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(map::get));

代替一个集合的映射,考虑使用.< /P>

Multimap Multimap=HashBasedMultimap.create()
for(条目:map.entrySet()){
multimap.put(entry.getValue(),entry.getKey());
}

> p>而不是一个集合的映射,考虑使用.< /p>
Multimap Multimap=HashBasedMultimap.create()
for(条目:map.entrySet()){
multimap.put(entry.getValue(),entry.getKey());
}
    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);
        }
    }
{1=[E], 2=[C], 3=[A, F], 4=[B, D]}
Multimap<Integer, String> multimap = HashBasedMultimap.create()
for (Entry<String, Integer> entry : map.entrySet()) {
  multimap.put(entry.getValue(), entry.getKey());
}