java - 比较两个映射并删除所有具有相同键或相同值的元素

标签 java merge hashmap unique

我有两个 map 需要比较并将它们合并到一个结果 map 中。我需要删除所有具有相同键或相同值的元素。

基本上,假设我有两个 map :

Map<String, String> map1 = new HashMap<>();
map1.put("1", "A");
map1.put("2", "A");
map1.put("3", "B");
map1.put("4", "C");
map1.put("5", "D");
map1.put("6", "E");

Map<String, String> map2 = new HashMap<>();
map2.put("1", "B");
map2.put("2", "A");
map2.put("4", "F");
map2.put("6", "C");
map2.put("7", "G");
map2.put("8", "H");

我需要删除所有具有相同键或相同值的条目,并且只需要保留双向唯一条目。所以在合并之后,我需要有以下结果映射,其中每个键映射到一个唯一值并且每个值都有一个唯一键:

("5", "D"), ("7", "G"), ("8", "H")

在 Java 中执行此操作的最佳方法是什么?

最佳答案

我会创建另一个包含 map1 和 map2 中所有值和键的映射,然后我会通过一个循环删除重复的键和值

Map<String, String> map3 = new HashMap<>();
map3.putAll(map1);
map3.putAll(map2);

for(String a: map1.keySet()){
    if(map2.containsKey(a) || map2.containsValue(map1.get(a))){
        map3.remove(a);
    }
}

希望这有用!

关于java - 比较两个映射并删除所有具有相同键或相同值的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864110/

相关文章:

java - 如果 C# 的基本类型以不同的方式实现,性能会有所不同吗?

java - 为什么我的数组不打印出我的输入?

java - 如何从 HashMap 的 ArrayList 获取特定值

c++ - 错误 : no match for 'operator+' (operand types are 'std::__cxx11::list<int>' and 'int' )|

c++ - HashMap : What's the difference between a node map and a flat map?

java - 查找 HashMap 是否包含值并仅删除该值

java - 如何导出带有项目文件的用户库以便能够在另一台电脑上编译项目

java - 未添加 JPA 一对一关系

r - 有没有办法在 R 中的同一 GRange 对象中合并重叠的数据间隔?

eclipse - EGit "synchronize workspace"不会将 merge 冲突标记为已解决