地图中的值可能不是唯一的。但是如果是(在你的情况下),你可以像你在问题中写的那样创建一个通用的方法来转换它:
private static Map invert(Map map) {
Map inv = new HashMap();
for (Entry entry : map.entrySet())
inv.put(entry.getValue(), entry.getKey());
return inv;
}
Java 8:
public static Map invert(Map map) {
return map.entrySet()
.stream()
.collect(Collectors.toMap(Entry::getValue, c -> c.getKey()));
}
使用示例:
public static void main(String[] args) {
Map map = new HashMap();
map.put("Hello", 0);
map.put("World!", 1);
Map inv = invert(map);
System.out.println(inv); // outputs something like "{0=Hello, 1=World!}"
}
旁注:put(..,..)方法将返回一个键的“旧”值。如果它不是null,你可能会抛出一个新的IllegalArgumentException(“Map值必须是唯一的”)或类似的东西。