如何通过键和值比较两个映射并将差异映射存储在结果映射中

时间:2014-02-04 17:54:39

标签: java map hashmap

假设我有两张地图:

Map mapA = new HashMap();
Map mapB = new HashMap();

mapA.put("JEETENDRA", "24");
mapA.put("AHUJA", "24"); --1A
mapA.put("AHUJA", "25");---2A
mapA.put("PAL", "24");

mapB.put("AHUJA", "24");
mapB.put("JEETENDRA", "24");---1B
mapB.put("PAL", "24");

现在我想用键和值来比较两个映射,因为2A和1A有关键的共同点。 理想情况下我知道错误,因为键应该是map的唯一,但在代码中我检索两列记录并将其存储为map。

MapA在运营之前 MapB经过一些操作。

1 个答案:

答案 0 :(得分:1)

你可以使用这个方法,这里我使用了Generics,并且我使用了一个名称结果的TreeMap来保存两个HashMaps中的所有键,从这个方法你将获得Hashmaps中所有匹配的对象

public static <K extends Comparable<? super K>, V>
    Map<K, Boolean> compareKeysAndValues(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;
    }

如果你想获得不同的值,只需反转check in result.put function