[英]How to Compare 2 LinkedHashMap and get difference in keys & values?
There are 2 LinkedHashMaps. 有2个LinkedHashMap。 I have to check if both LinkedHashMaps have same keys & values.
我必须检查两个LinkedHashMaps是否具有相同的键和值。 If one LinkedHashMap contains extra keys + values then it should get printed or stored in 3rd LinkedHashMap.
如果一个LinkedHashMap包含额外的键和值,则应打印或将其存储在第3个LinkedHashMap中。 If any of the key or value is different in 2nd LinkedHashMap then it should be notified (print in console)
如果第二个LinkedHashMap中的任何键或值不同,则应将其通知(在控制台中打印)
Eg 例如
Map1 contains {Aa, Bb, Cc} Map1包含{Aa,Bb,Cc}
Map2 contains {Aa, Br, Cc, Zz} Map2包含{Aa,Br,Cc,Zz}
So here 3rd LinkedHashMap should contain {Zz} as it contains extra key and 因此,这里的第3个LinkedHashMap应该包含{Zz},因为它包含额外的密钥,并且
{Br} should get printed as it is modified {Br}应该在修改后打印
you can use this class :) 您可以使用此类:)
public class MapCompare {
private LinkedHashMap<String, String> differencesMap;
private LinkedHashMap<String, String> extraMap;
private void main(LinkedHashMap<String, String> map1, LinkedHashMap<String, String> map2) {
this.differencesMap = new LinkedHashMap<>();
this.extraMap = new LinkedHashMap<>();
Set<Map.Entry<String, String>> set1 = ((LinkedHashMap<String, String>) map1.clone()).entrySet();
Set<Map.Entry<String, String>> set2 = ((LinkedHashMap<String, String>) map2.clone()).entrySet();
set1.removeAll(set2);
compare(set1, map2);
set1 = map1.entrySet();
set2.removeAll(set1);
compare(set2, map1);
}
private LinkedHashMap<String, String> getDifferencesMap() {
return differencesMap;
}
private LinkedHashMap<String, String> getExtraMap() {
return extraMap;
}
private void compare(Set<Map.Entry<String, String>> set, LinkedHashMap<String, String> map) {
for (Map.Entry<String, String> entry : set) {
String key = entry.getKey();
String value = entry.getValue();
if (map.containsKey(key) || map.containsValue(value)) {
differencesMap.put(key, value);
} else {
extraMap.put(key, value);
}
}
}
public static void main(String[] args) {
LinkedHashMap<String, String> map1 = new LinkedHashMap<>();
map1.put("A", "a");
map1.put("B", "b");
map1.put("C", "c");
LinkedHashMap<String, String> map2 = new LinkedHashMap<>();
map2.put("A", "a");
map2.put("C", "c");
map2.put("B", "r");
map2.put("Z", "z");
MapCompare mapCompare = new MapCompare();
mapCompare.main(map1,map2);
System.out.println("diff: " + mapCompare.getDifferencesMap());
System.out.println("extra: " + mapCompare.getExtraMap());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.