[英]Comparing two hashmaps for equal values and same key sets?
我怎样才能最好地比较两个HashMap
s,如果我想知道它们是否包含与另一个不同的键,以及这些键的值是否相互匹配。
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 不同,应该会失败。
我怎样才能最好地比较未排序的哈希图?
只需使用:
mapA.equals(mapB);
将指定对象与此映射进行相等性比较。 如果给定对象也是一个映射,并且两个映射表示相同的映射,则返回true
对两个HashMap
的keySet()
进行equals
检查。
注意:
如果您的Map
包含String
键,那么没问题,但如果您的Map包含objA
类型键,那么您需要确保您的类objA
实现equals()
。
将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;
}
/* JAVA 8 using streams*/
public static void main(String args[])
{
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
map.put(100, true);
map.put(1011, false);
map.put(1022, false);
Map<Integer, Boolean> map1 = new HashMap<Integer, Boolean>();
map1.put(100, false);
map1.put(101, false);
map1.put(102, false);
boolean b = map.entrySet().stream().filter(value -> map1.entrySet().stream().anyMatch(value1 -> (value1.getKey() == value.getKey() && value1.getValue() == value.getValue()))).findAny().isPresent();
System.out.println(b);
}
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;
}
如果你有两个地图让我们说map1和map2然后使用java8 Streams,我们可以使用下面的代码比较地图。但是建议使用equals而不是!=或==
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);
这种比较的一个简单而好的算法可能是:
Map<Integer, Boolean> map1 = new HashMap<Integer, Boolean>();
map1.put(100, false);
map1.put(101, false);
map1.put(102, false);
Map<Integer, Boolean> map2 = new HashMap<Integer, Boolean>();
map2.put(100, false);
map2.put(1011, false);
map2.put(1022, false);
if (!map1.keySet().equals(map2.keySet())) {
result = false;
} else {
result = map1.keySet()
.stream()
.allMatch(key -> map1.get(key).equals(map2.get(key)));
}
只需比较键集,如果它们相等,则比较两个地图上每个键的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.