How can I best compare two HashMap
s, if I want to find out if none of them contains different keys than the other, and if the values of that keys match each oth
Make an equals
check on the keySet()
of both HashMap
s.
NOTE:
If your Map
contains String
keys then it is no problem, but if your Map contains objA
type keys then you need to make sure that your class objA
implements equals()
.
Compare every key in mapB against the counterpart in mapA. Then check if there is any key in mapA not existing in mapB
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;
}
Simply use :
mapA.equals(mapB);
Compares the specified object with this map for equality. Returns true if the given object is also a map and the two maps represent the same mappings
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;
}
if you have two maps lets say map1 and map2 then using java8 Streams,we can compare maps using code below.But it is recommended to use equals rather then != or ==
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);
/* 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);
}