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());
}

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

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

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

作为 out了,你也可以这样做:

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/51324105/

相关文章:

java - ActiveJDBC 在 findFirst 时无法确定模型类名称,但在插入时无法确定

java - Java JDK10 中的 TypeTags 错误

java - 将方法调用委托(delegate)给同一接口(interface)的集合的接口(interface)实现的正确术语是什么?

java - 如何存储用于构建键值组合的 Java 常量

java - 为什么 Android Studio 在 Reformatting the code 上导入完整包

java - 枚举集合的无序对(2-组合)

java - HashMap 中的字符串相等

java - Web/J2EE 和客户端应用程序的端到端分析

java - 由于内存不足错误,Openshift Wildfly 10 自动重新启动

java - 如何从 HashMap 中删除元素而不出现 ConcurrentModificationException