2つのHashMap
sを比較する最良の方法は、それらのどれにも他と異なるキーが含まれていないか、そのキーの値が互いに一致しているかを調べたい場合です。
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が異なるために失敗するはずです。
ソートされていないハッシュマップを比較するにはどうすればよいですか?
両方のequals
sのkeySet()
でHashMap
チェックを行います。
注:
Map
にString
キーが含まれている場合は問題ありませんが、マップにobjA
タイプのキーが含まれている場合は、クラスobjA
を確認する必要があります。 equals()
を実装します。
単に使用します:
mapA.equals(mapB);
指定されたオブジェクトとこのマップが等しいかどうかを比較します。指定されたオブジェクトもマップであり、2つのマップが同じマッピングを表す場合、trueを返します。
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;
}
/* 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);
}
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;
}
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);