It seems you just want to get the keys and without the values, so the following method will do exactly that.
public static <K> List mapDifference(Map<? extends K, ? extends Object> map1, Map<? extends K, ? extends Object> map2)
{
List<K> keys = new ArrayList<K>();
Set<Map.Entry<? extends K, ? extends Object>> set;
Map<? extends K, ? extends Object> other;
if(map1.size() > map2.size()) {
set = map1.entrySet(); other = map2;
} else {
set = map2.entrySet(); other = map1;
}
Iterator<Map.Entry<? extends K, ? extends Object>> iterator = set.iterator();
while(iterator.hasNext()) {
Map.Entry<? extends K, ? extends Object> entry = iterator.next();
K key = entry.getKey();
if(!other.containsKey(key) || !other.get(key).equals(entry.getValue())) {
keys.add(key);
}
}
return keys;
}
TESTS
Map<String, Integer> map1 = new HashMap<>();
map1.put("First", 1);
map1.put("Second", 2);
map1.put("Third", 3);
Map<String, Integer> map2 = new HashMap<>();
map2.put("First", 1);
map2.put("Second", 3);
map2.put("Third", 3);
List<String> diff = mapDifference(map1, map2);
System.out.println(diff);
[Second]
Map<String, Integer> map1 = new HashMap<>();
map1.put("First", 1);
map1.put("Second", 2);
map1.put("Third", 3);
Map<String, Integer> map2 = new HashMap<>();
map2.put("First", 1);
map2.put("Second", 3);
map2.put("Third", 3);
map2.put("Forth", 4);
List<String> diff = mapDifference(map1, map2);
System.out.println(diff);
[Second, Forth]