例如,如果我有一个带整数和字符串的地图:
Map<Integer, String> myMap = new HashMap<Integer, String>();
此地图将包含整数和名称值的键值
我要做的是创建一个新的地图,从地图复制所有的值(名称),并使它们成为新地图的关键。
现在我无法得到的棘手部分,是我想要的新地图的值是数字,但如果有多个数字对应同一个名称,我希望它们保存在一个集合中。
新地图示例:
Map<String, Set<Integer>> returnMap = new TreeMap<String, Set<Integer>>();
所以如果“John”对应1,2,3,4。我希望新地图包含一个包含1,2,3,4
的Set的“John”键答案 0 :(得分:5)
Google的Guava library有一个很好的Multimap类,它将键映射到多个值。如果您使用它,您可以利用一系列辅助方法:
SetMultimap<String, Integer> returnMap =
Multimaps.invertFrom(Multimaps.forMap(myMap), TreeMultimap.create());
答案 1 :(得分:4)
这不是那么棘手:)
Map<Integer, String> map = ... //Your map
Map<String, Set<Integer>> reverseMap = new TreeMap<String, Set<Integer>>();
for(Map.Entry<Integer, String> entry : map.entrySet()) {
Integer key = entry.getKey();
String value = entry.getValue();
Set<Integer> set;
if(reverseMap.containsKey(value)) {
set = reverseMap.get(value);
set.add(key);
} else {
set = new HashSet<Integer>();
set.add(key);
reverseMap.put(value, set);
}
}