how to compare two hash maps?
java
Solution
Here's a method that generates a Map of the results (Map of key to boolean). It will play nicely regardless of different keys and key sort order:
/**
* Works with any two maps with common key / value types.
* The key type must implement Comparable though (for sorting).
* Returns a map containing all keys that appear in either of the supplied maps.
* The values will be true if and only if either
* - map1.get(key)==map2.get(key) (values may be null) or
* - map1.get(key).equals(map2.get(key)).
*/
public static <K extends Comparable<? super K>, V>
Map<K, Boolean> compareEntries(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;
}
private static boolean equal(final Object obj1, final Object obj2){
return obj1 == obj2 || (obj1 != null && obj1.equals(obj2));
}
Usage:
public static void main(final String[] args){
final Map<Integer, String> map1 = new HashMap<Integer, String>();
map1.put(1, null);
map1.put(2, "Different");
map1.put(3, "Same");
map1.put(4, "First Map only");
final Map<Integer, String> map2 = new HashMap<Integer, String>();
map2.put(3, "Same");
map2.put(1, null);
map2.put(2, "Yup, different");
map2.put(5, "Second Map only");
final Map<Integer, Boolean> comparisonResult =
compareEntries(map1, map2);
for(final Entry<Integer, Boolean> entry : comparisonResult.entrySet()){
System.out.println("Entry:" + entry.getKey() + ", value: "
+ entry.getValue());
}
}
Output:
Entry:1, value: true Entry:2, value: false Entry:3, value: true Entry:4, value: false Entry:5, value: false
Problem
How to compare the values in both hash maps with the help of keys ? Since the keys are identical whereas values are'nt. and return boolean result for each key comparision. like: ``` map1=[1,res] [2,tr] [3,677] [4,cv] map2=[1,res] [2,cd] [3,677] [4,fs] ``` It should return me ``` true false true false ```