how to compare two hash maps?

后端 未结 7 1018
独厮守ぢ
独厮守ぢ 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:27

    I was directed here from this (possibly duplicate) question and was surprised to find that Google Guava wasn't mentioned in the answers.

    Instead of re-inventing the wheel, use the handy the Maps.difference method.

    0 讨论(0)
  • 2021-02-08 02:32

    Pseudo Code:

    HashMap map1;
    HashMap map2;
    HashMap resultMap;
    for(KeyType key : map1.keySet() ) {
      if(map1.get(key).equals(map2.get(key)){
        resultMap.put(key,true);
      } else {
        resultMap.put(key,false);
      }   
    

    }

    0 讨论(0)
  • 2021-02-08 02:46

    You can take keys of one map (with keySet() method), iterate through them, get values from both maps (with get() method), and compare them.

    Also, you can use values() method to get all key-value pairs form one map, iterate through it and compare values with values from another map.

    0 讨论(0)
  • 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 <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

    0 讨论(0)
  • 2021-02-08 02:52

    Assuming that you have the same entry sets:

    import java.util.HashMap;
    import java.util.Map.Entry;
    
    public class HashMapComparison {
    
        public static void main(String[] args) {
    
            HashMap<Integer, String> map1 = new HashMap<Integer, String>();
            map1.put(1, "res");
            map1.put(2, "tr");
    
            HashMap<Integer, String> map2 = new HashMap<Integer, String>();
            map2.put(1, "res");
            map2.put(2, "cd");
    
            for (Entry<Integer, String> entry : map1.entrySet()) {
                Integer key = entry.getKey();
                System.out.println("key " + key + ": "
                        + entry.getValue().equals(map2.get(key)));
            }
    
        }
    
    }
    
    0 讨论(0)
  • 2021-02-08 02:52

    use:

    mapA.equals(mapB);
    

    This will give back a boolean result.

    0 讨论(0)
提交回复
热议问题