假设我有这个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"}
我该怎么做呢?
答案 0 :(得分:5)
使用Java8流
Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(k -> map.get(k)));
输出
{1=[E], 2=[C], 3=[A, F], 4=[B, D]}
使用方法ref
Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(map::get));
获取密钥的方式
Map<Integer, List<String>> valueMap = map.keySet().stream().collect(Collectors.groupingBy(map::get, TreeMap::new, Collectors.toList()));
在Java7及以下
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]}
答案 1 :(得分:1)
请考虑使用Multimap。
,而不是集合的地图Multimap<Integer, String> multimap = HashBasedMultimap.create()
for (Entry<String, Integer> entry : map.entrySet()) {
multimap.put(entry.getValue(), entry.getKey());
}