web-dev-qa-db-ja.com

等しい値と同じキーセットの2つのハッシュマップを比較しますか?

2つのHashMapsを比較する最良の方法は、それらのどれにも他と異なるキーが含まれていないか、そのキーの値が互いに一致しているかを調べたい場合です。

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");

AとBを比較する場合、キーBとDが異なるために失敗するはずです。

ソートされていないハッシュマップを比較するにはどうすればよいですか?

30
membersound

両方のequalssのkeySet()HashMapチェックを行います。

注:

MapStringキーが含まれている場合は問題ありませんが、マップにobjAタイプのキーが含まれている場合は、クラスobjAを確認する必要があります。 equals()を実装します。

26
Narendra Pathai

単に使用します:

mapA.equals(mapB);

指定されたオブジェクトとこのマップが等しいかどうかを比較します。指定されたオブジェクトもマップであり、2つのマップが同じマッピングを表す場合、trueを返します。

42
user2336315

MapBのすべてのキーをmapAの対応するキーと比較します。次に、mapBに存在しないキーがmapAにあるかどうかを確認します

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;
}
11
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

2つのマップがあり、map1とmap2でJava8 Streamsを使用している場合、以下のコードを使用してマップを比較できますが、!=または==ではなくequalsを使用することをお勧めします

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