how to compare two hash maps?

后端 未结 7 1038
独厮守ぢ
独厮守ぢ 2021-02-08 02:22

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

7条回答
  •  野性不改
    2021-02-08 02:47

    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 , V>
    Map compareEntries(final Map map1,
        final Map map2){
        final Collection allKeys = new HashSet();
        allKeys.addAll(map1.keySet());
        allKeys.addAll(map2.keySet());
        final Map result = new TreeMap();
        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 map1 = new HashMap();
        map1.put(1, null);
        map1.put(2, "Different");
        map1.put(3, "Same");
        map1.put(4, "First Map only");
        final Map map2 = new HashMap();
        map2.put(3, "Same");
        map2.put(1, null);
        map2.put(2, "Yup, different");
        map2.put(5, "Second Map only");
        final Map comparisonResult =
            compareEntries(map1, map2);
        for(final Entry 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

提交回复
热议问题