Java 如何比较2个LinkedHashMap并获得键的差异&;价值观

Java 如何比较2个LinkedHashMap并获得键的差异&;价值观,java,collections,hashmap,linkedhashmap,Java,Collections,Hashmap,Linkedhashmap,有两个LinkedHashMaps。我必须检查两个LinkedHashMaps是否具有相同的键和值。如果一个LinkedHashMap包含额外的键+值,那么它应该被打印或存储在第三个LinkedHashMap中。如果第二个LinkedHashMap中的任何键或值不同,则应通知它(在控制台中打印) 乙二醇 Map1包含{A-A,B-B,C-C} Map2包含{A-A,B-r,C-C,Z-Z} 所以这里第三个LinkedHashMap应该包含{Z-Z},因为它包含额外的键和 {B-r}应该在修改时打

有两个LinkedHashMaps。我必须检查两个LinkedHashMaps是否具有相同的键和值。如果一个LinkedHashMap包含额外的键+值,那么它应该被打印或存储在第三个LinkedHashMap中。如果第二个LinkedHashMap中的任何键或值不同,则应通知它(在控制台中打印)

乙二醇

Map1包含{A-A,B-B,C-C}

Map2包含{A-A,B-r,C-C,Z-Z}

所以这里第三个LinkedHashMap应该包含{Z-Z},因为它包含额外的键和

{B-r}应该在修改时打印出来

您可以使用这个类:)

公共类映射比较{
私有LinkedHashMap差异映射;
私有LinkedHashMap外部映射;
私有void main(LinkedHashMap映射1、LinkedHashMap映射2){
this.differencesMap=新建LinkedHashMap();
this.extraMap=新建LinkedHashMap();
Set set1=((LinkedHashMap)map1.clone()).entrySet();
Set set2=((LinkedHashMap)map2.clone()).entrySet();
set1.移除所有(set2);
比较(set1,map2);
set1=map1.entrySet();
set2.移除所有(set1);
比较(set2,map1);
}
私有LinkedHashMap GetDifferenceMap(){
返回差分图;
}
私有LinkedHashMap getExtraMap(){
返回外部映射;
}
私有void比较(集合、LinkedHashMap映射){
for(Map.Entry:set){
String key=entry.getKey();
字符串值=entry.getValue();
if(map.containsKey(key)| | map.containsValue(value)){
DifferenceMap.put(键、值);
}否则{
extraMap.put(键、值);
}
}
}
公共静态void main(字符串[]args){
LinkedHashMap map1=新LinkedHashMap();
map1.put(“A”、“A”);
map1.put(“B”、“B”);
map1.put(“C”、“C”);
LinkedHashMap map2=新LinkedHashMap();
map2.put(“A”、“A”);
map2.put(“C”、“C”);
map2.put(“B”、“r”);
地图2.放置(“Z”、“Z”);
MapCompare MapCompare=新建MapCompare();
main(map1、map2);
System.out.println(“diff:+mapCompare.getDifferencesMap());
System.out.println(“额外:”+mapCompare.getExtraMap());
}
}

嗯。。。你有什么问题吗?@SeelenVirtuoseNeedLogicfortheStackOverflow社区如果你尝试了一些东西并坚持了一些东西,那将是最有帮助的。无论如何,对另一个列表中的键迭代一个列表检查,如果没有找到,则添加到第三个列表,如果值不同,则打印。在迭代从第二个列表中删除时,您可以将第二个列表的所有剩余条目直接添加到末尾的第三个列表中。
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());
    }
}