我知道你们中的一些人会将其标记为重复,但是不想在其他线程中问类似的问题。 我有两张地图:
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
答案 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