你可以试试这个:
HashMap<Integer, String> original = new HashMap<>();
HashMap<String, ArrayList<Integer>> inverted = new HashMap<>();
original.put(1, "A");
original.put(2, "B");
original.put(3, "C");
original.put(4, "A");
for (Integer key: original.keySet()) {
String newKey = original.get(key);
inverted.computeIfAbsent(newKey, k -> new ArrayList<>());
inverted.get(newKey).add(key);
}
System.out.println(original);
System.out.println(inverted);
所以,假设HashMap<Integer, String> original 是{1=A, 2=B, 3=C, 4=A},那么你将得到{A=[1, 4], B=[2], C=[3]}。
编辑:如果您想要更通用的版本,正如 @Mr.Polywhirl 所建议的,您可以使用:
public static final <T, U> Map<U, List<T>> invertMap(Map<T, U> map) {
HashMap<U, List<T>> invertedMap = new HashMap<>();
for (T key : map.keySet()) {
U newKey = map.get(key);
invertedMap.computeIfAbsent(newKey, k -> new ArrayList<>());
invertedMap.get(newKey).add(key);
}
return invertedMap;
}