Java中的反向HashMap键和值

新手上路,请多包涵

这是一个简单的问题,我有一个简单的 HashMap,我想反转它的键和值。

 HashMap<Character, String> myHashMap = new HashMap<Character, String>();
myHashMap.put('a', "test one");
myHashMap.put('b', "test two");

我想创建一个新的 HashMap,在其中放置相反的内容。

 HashMap<String, Character> reversedHashMap = new HashMap<String, Character>();
e.g. Keys "test one" & "test two" and values 'a' & 'b'.

原文由 Ken 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 768
2 个回答

他们都是独一无二的,是的

如果您确定您的值是唯一的,您可以遍历旧地图的条目。

 Map<String, Character> myNewHashMap = new HashMap<>();
for(Map.Entry<Character, String> entry : myHashMap.entrySet()){
    myNewHashMap.put(entry.getValue(), entry.getKey());
}

或者,您可以使用像 Guava 提供的双向地图并使用 inverse() 方法:

 BiMap<Character, String> myBiMap = HashBiMap.create();
myBiMap.put('a', "test one");
myBiMap.put('b', "test two");

BiMap<String, Character> myBiMapInversed = myBiMap.inverse();

随着 java-8 的推出,您也可以这样做:

 Map<String, Integer> map = new HashMap<>();
map.put("a",1);
map.put("b",2);

Map<Integer, String> mapInversed =
    map.entrySet()
       .stream()
       .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey))

最后,我添加了我对 proton pack 库 的贡献,其中包含 Stream API 的实用方法。有了它,你可以这样做:

 Map<Character, String> mapInversed = MapStream.of(map).inverseMapping().collect();

原文由 Alexis C. 发布,翻译遵循 CC BY-SA 3.0 许可协议

Apache 公共集合库提供了一种用于反转地图的实用方法。如果您确定 myHashMap 的值是唯一的,则可以使用它

org.apache.commons.collections.MapUtils.invertMap(java.util.Map map)

示例代码

HashMap<String, Character> reversedHashMap = MapUtils.invertMap(myHashMap)

原文由 Riju Thomas 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题