我如何才能最好地比较两个HashMap
,如果我想知道它们中是否包含不同的键,以及它们的值是否相互匹配。
Map<objA, objB> mapA = new HashMap<objA, objB>();
mapA.put("A", "1");
mapA.put("B", "2");
Map<objA, objB> mapB = new HashMap<objA, objB>();
mapB.put("D", "4");
mapB.put("A", "1");
将A与B进行比较时,由于键B和D不同,它会失败。
我怎样才能最好地比较未分类的哈希图?
答案 0 :(得分:41)
只需使用:
mapA.equals(mapB);
将指定对象与此映射进行相等性比较。返回true 如果给定对象也是地图,则两个地图代表相同 映射
答案 1 :(得分:26)
对equals
的{{1}} keySet()
进行HashMap
检查。
注意:强> 的
如果您的Map
包含String
个密钥,那么这没问题,但如果您的地图包含objA
个类型密钥,那么您需要确保您的班级objA
实施equals()
。
答案 2 :(得分:9)
将mapB中的每个键与mapA中的对应键进行比较。然后检查mapB中是否存在mapA中没有任何键
public boolean mapsAreEqual(Map<String, String> mapA, Map<String, String> mapB) {
try{
for (String k : mapB.keySet())
{
if (!mapA.get(k).equals(mapB.get(k))) {
return false;
}
}
for (String y : mapA.keySet())
{
if (!mapB.containsKey(y)) {
return false;
}
}
} catch (NullPointerException np) {
return false;
}
return true;
}
答案 3 :(得分:1)
requests.post(data=json.dumps(postData))
答案 4 :(得分:0)
public boolean compareMap(Map<String, String> map1, Map<String, String> map2) {
if (map1 == null || map2 == null)
return false;
for (String ch1 : map1.keySet()) {
if (!map1.get(ch1).equalsIgnoreCase(map2.get(ch1)))
return false;
}
for (String ch2 : map2.keySet()) {
if (!map2.get(ch2).equalsIgnoreCase(map1.get(ch2)))
return false;
}
return true;
}
答案 5 :(得分:0)
如果您有两个地图,让我们说map1和map2,然后使用java8 Streams,我们可以使用下面的代码比较地图。但是建议使用等号而不是!=或==
boolean b = map1.entrySet().stream().filter(value ->
map2.entrySet().stream().anyMatch(value1 ->
(value1.getKey().equals(value.getKey()) &&
value1.getValue().equals(value.getValue())))).findAny().isPresent();
System.out.println("comparison "+b);