wake-up-neo.net

Vergleichen von zwei Hashmaps für gleiche Werte und gleiche Schlüsselsätze?

Wie kann ich am besten zwei HashMaps vergleichen, wenn ich herausfinden möchte, ob keiner von ihnen andere Schlüssel als die anderen enthält und ob die Werte dieser Schlüssel miteinander übereinstimmen.

Map<objA, objB> mapA = new HashMap<objA, objB>();
mapA.put("A", "1");
mapA.put("B", "2");

Map<objA, objB> mapB = new HashMap<objA, objB>();
mapB.put("D", "4");
mapB.put("A", "1");

Beim Vergleich von A mit B sollte dies aufgrund unterschiedlicher Schlüssel B und D fehlschlagen.

Wie kann ich am besten nicht sortierte Hashmaps vergleichen?

26
membersound

Machen Sie eine equals-Überprüfung der keySet() beider HashMaps.

HINWEIS:

Wenn MapString-Schlüssel enthält, ist dies kein Problem. Wenn Ihre Map objA-Typschlüssel enthält, müssen Sie sicherstellen, dass Ihre Klasse objAequals() implementiert.

25
Narendra Pathai

Einfach benutzen:

mapA.equals(mapB);

Vergleicht das angegebene Objekt mit dieser Karte auf Gleichheit. Gibt true zurück, wenn das angegebene Objekt auch eine Map ist und die beiden Maps die gleichen Mappings darstellen

42
user2336315

Vergleichen Sie jeden Schlüssel in mapB mit dem Schlüssel in mapA. Prüfen Sie dann, ob in mapA ein Schlüssel vorhanden ist, der nicht in mapB vorhanden ist

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;
}
9
Antonio Ortells
/* 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);
    }
1
Haroon Rawat
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
SanA

wenn Sie zwei Maps haben, sagen wir map1 und map2 und dann Java8 Streams. Wir können Maps mit dem nachstehenden Code vergleichen. Es wird jedoch empfohlen, Equals zu verwenden 

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
Swati