[英]Comparing two hashmaps for equal values and same key sets?
我怎樣才能最好地比較兩個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 不同,應該會失敗。
我怎樣才能最好地比較未排序的哈希圖?
只需使用:
mapA.equals(mapB);
將指定對象與此映射進行相等性比較。 如果給定對象也是一個映射,並且兩個映射表示相同的映射,則返回true
對兩個HashMap
的keySet()
進行equals
檢查。
注意:
如果您的Map
包含String
鍵,那么沒問題,但如果您的Map包含objA
類型鍵,那么您需要確保您的類objA
實現equals()
。
將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;
}
如果你有兩個地圖讓我們說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);
這種比較的一個簡單而好的算法可能是:
Map<Integer, Boolean> map1 = new HashMap<Integer, Boolean>();
map1.put(100, false);
map1.put(101, false);
map1.put(102, false);
Map<Integer, Boolean> map2 = new HashMap<Integer, Boolean>();
map2.put(100, false);
map2.put(1011, false);
map2.put(1022, false);
if (!map1.keySet().equals(map2.keySet())) {
result = false;
} else {
result = map1.keySet()
.stream()
.allMatch(key -> map1.get(key).equals(map2.get(key)));
}
只需比較鍵集,如果它們相等,則比較兩個地圖上每個鍵的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.