java - Java中的反向HashMap键和值

标签 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'.

最佳答案

They all are unique, yes

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

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

或者,您可以使用双向 map ,例如 Guava提供和使用inverse()方法:

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

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

作为 出来了,你也可以这样:

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 library ,其中包含 Stream API 的实用方法。有了它,你可以这样做:

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

关于java - Java中的反向HashMap键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20412354/

相关文章:

java - HashMap 有什么问题?

java - Jena:如何添加带有数值的属性?

Java Swing revalidate() 与 repaint()

java - 如何使用另一个类或函数中的 HashMap?

java - volatile HashMap 不在 Thead 之外更新

java - 编译报错ConcurrentModificationException,试图使用移除同名的方法

java - 我如何将其写为 java 中的 list<map<string, string> 结构

java - Spring Boot 如何知道要注入(inject)哪个对象?

java - 无法从 Google Play Android Developer API 获取订阅详细信息

java - 如何在 Minecraft 1.11 forge 上注册区 block