通过键和值比较两个映射并将差异存储到结果映射中

时间:2020-07-28 22:22:23

标签: java hashmap

我知道你们中的一些人会将其标记为重复,但是不想在其他线程中问类似的问题。 我有两张地图:

Map<Long, Long> map1 = new HashMap<>();
Map<Long, Long) map2 = new HashMap<>();

这两个地图的大小不同。 地图将如下所示:

map1        map2
(1,1)       (1,1)
(2,1)       (2,1)
            (3,1) 

或:

map1        map2
(1,1)       (1,1)
(2,1)       (2,1)
            (3,1) 
            (4,1)

现在,我要创建map3,该map3仅包含map1和map2之间的差异,即(K,V)->(3,1)((K,V)->(3,1) ;(4,1))。然后,我将获得(K,V)值并使用它们。 在该线程similar question中,有解决方案,但不适用于我。传递给方法compareKeysAndValues(map1,map2),接收:必需的Map 提供的Map

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

一个明显的解决方案是遍历两个地图中的键,如果另一个地图中不存在该键,则将条目添加到新地图中:

import java.util.HashMap;
import java.util.Map;

public class test {
    public static void main(String[] args){
        Map<Long, Long> map1 = new HashMap<>();
        Map<Long, Long> map2 = new HashMap<>();
        map1.put(1L, 1L);
        map1.put(2L, 1L);
        map1.put(5L, 1L);
        map2.put(1L, 1L);
        map2.put(2L, 1L);
        map2.put(3L, 1L);
        map2.put(4L, 1L);

        Map<Long, Long> map3 = new HashMap<>();

        for(Map.Entry<Long, Long> entry : map1.entrySet()){
            if(!map2.containsKey(entry.getKey())){
                map3.put(entry.getKey(), entry.getValue());
            }
        }

        for(Map.Entry<Long, Long> entry : map2.entrySet()){
            if(!map1.containsKey(entry.getKey())){
                map3.put(entry.getKey(), entry.getValue());
            }
        }

        for(Map.Entry<Long, Long> entry : map3.entrySet()){
            System.out.println(entry.getKey() + ", " + entry.getValue());
        }
    }
}

输出:

3, 1
4, 1
5, 1