Java 如何通过键和值比较两个映射,并将差异映射存储在结果映射中
假设我有两张地图:Java 如何通过键和值比较两个映射,并将差异映射存储在结果映射中,java,map,hashmap,Java,Map,Hashmap,假设我有两张地图: Map mapA = new HashMap(); Map mapB = new HashMap(); mapA.put("JEETENDRA", "24"); mapA.put("AHUJA", "24"); --1A mapA.put("AHUJA", "25");---2A mapA.put("PAL", "24"); mapB.put("AHUJA", "24"); mapB.put("JEETENDRA", "24");---1B mapB.put("PAL",
Map mapA = new HashMap();
Map mapB = new HashMap();
mapA.put("JEETENDRA", "24");
mapA.put("AHUJA", "24"); --1A
mapA.put("AHUJA", "25");---2A
mapA.put("PAL", "24");
mapB.put("AHUJA", "24");
mapB.put("JEETENDRA", "24");---1B
mapB.put("PAL", "24");
现在我想通过键和值来比较这两个映射,因为2A和1A有键公共。
理想情况下,我知道它是错误的,因为键对于map应该是唯一的,但在代码中,我检索两列记录并将其存储为map
MapA在操作之前进行。MapB是在一些操作之后进行的。您可以使用这个方法,这里我使用了泛型,我使用了一个名为result的树映射来保存两个hashmap中的所有键,通过这个方法您将获得hashmap中所有匹配的对象
public static <K extends Comparable<? super K>, V>
Map<K, Boolean> compareKeysAndValues(final Map<K, V> map1,
final Map<K, V> map2){
final Collection<K> allKeys = new HashSet<K>();
allKeys.addAll(map1.keySet());
allKeys.addAll(map2.keySet());
final Map<K, Boolean> result = new TreeMap<K, Boolean>();
for(final K key : allKeys){
result.put(key,
map1.containsKey(key) == map2.containsKey(key) &&
Boolean.valueOf(equal(map1.get(key), map2.get(key))));
}
return result;
}
public staticmapA
不存在,因此无法检查。您知道值1A将被删除。“在这个映射中将指定的值与指定的键相关联。如果该映射以前包含了键的映射,则替换旧的值。”——您可能需要考虑嵌套的数据结构,如<代码> MAP>代码>来存储与单个键相关联的多个值。MAPA只对键“AHuja”有一个条目,由于现有密钥的值在put
上被覆盖。您能建议我使用合适的集合吗?我不想专门使用Google的Guava library。谢谢你,伙计!!!这个问题真的毫无意义。您希望比较两个地图并存储“结果”,但从未指明比较的内容。此外,正如其他人指出的那样,您违反了基本的映射行为(“1A”在映射中不存在,“AHUJA”在您的代码中只有“25”的值)。您注意到这是“理想错误”(这不仅是理想错误,事实上也是错误的),但对此不作任何调整或解释。@user3271997欢迎,如果它看起来完美,请单击正确的标记将其标记为正确