Comparing two hashmaps for equal values and same key sets?

后端 未结 6 953
北荒
北荒 2020-12-03 02:18

How can I best compare two HashMaps, if I want to find out if none of them contains different keys than the other, and if the values of that keys match each oth

相关标签:
6条回答
  • 2020-12-03 02:58

    Make an equals check on the keySet() of both HashMaps.

    NOTE:

    If your Map contains String keys then it is no problem, but if your Map contains objA type keys then you need to make sure that your class objA implements equals().

    0 讨论(0)
  • 2020-12-03 03:00

    Compare every key in mapB against the counterpart in mapA. Then check if there is any key in mapA not existing in mapB

    public boolean mapsAreEqual(Map<String, String> mapA, Map<String, String> mapB) {
    
        try{
            for (String k : mapB.keySet())
            {
                if (!mapA.get(k).equals(mapB.get(k))) {
                    return false;
                }
            } 
            for (String y : mapA.keySet())
            {
                if (!mapB.containsKey(y)) {
                    return false;
                }
            } 
        } catch (NullPointerException np) {
            return false;
        }
        return true;
    }
    
    0 讨论(0)
  • 2020-12-03 03:04

    Simply use :

    mapA.equals(mapB);

    Compares the specified object with this map for equality. Returns true if the given object is also a map and the two maps represent the same mappings

    0 讨论(0)
  • 2020-12-03 03:04
    public boolean compareMap(Map<String, String> map1, Map<String, String> map2) {
    
        if (map1 == null || map2 == null)
            return false;
    
        for (String ch1 : map1.keySet()) {
            if (!map1.get(ch1).equalsIgnoreCase(map2.get(ch1)))
                return false;
    
        }
        for (String ch2 : map2.keySet()) {
            if (!map2.get(ch2).equalsIgnoreCase(map1.get(ch2)))
                return false;
    
        }
    
        return true;
    }
    
    0 讨论(0)
  • 2020-12-03 03:13

    if you have two maps lets say map1 and map2 then using java8 Streams,we can compare maps using code below.But it is recommended to use equals rather then != or ==

    boolean b = map1.entrySet().stream().filter(value -> 
                map2.entrySet().stream().anyMatch(value1 -> 
                (value1.getKey().equals(value.getKey()) && 
      value1.getValue().equals(value.getValue())))).findAny().isPresent();   
    
    
    System.out.println("comparison  "+b);
    
    0 讨论(0)
  • 2020-12-03 03:19
    /* JAVA 8 using streams*/
       public static void main(String args[])
        {
            Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
            map.put(100, true);
            map.put(1011, false);
            map.put(1022, false);
    
            Map<Integer, Boolean> map1 = new HashMap<Integer, Boolean>();
            map1.put(100, false);
            map1.put(101, false);
            map1.put(102, false);
    
            boolean b = map.entrySet().stream().filter(value -> map1.entrySet().stream().anyMatch(value1 -> (value1.getKey() == value.getKey() && value1.getValue() == value.getValue()))).findAny().isPresent();
            System.out.println(b);
        }
    
    0 讨论(0)
提交回复
热议问题