当前位置: 首页 > 知识库问答 >
问题:

如何比较2个LinkedHashMap并获取键的差异

朱起运
2023-03-14

有2个LinkedHashMaps。我必须检查两个LinkedHashMaps是否有相同的密钥。

例如

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

地图 2 包含 {A-a, B-r, C-c, Z-z}

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

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

共有1个答案

彭鸿畅
2023-03-14

你可以使用这个类:)

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());
    }
}
 类似资料:
  • 问题内容: 我想知道如何比较两个布尔数组并列出不匹配的布尔值。 我写了一个2数组的简单示例。 我如何比较array1和array2并显示不匹配的内容。我正在尝试执行此操作以检查问答游戏的用户结果。 谢谢! 问题答案: 这里的 一个 实现,但无论是一个你追求的是完全不可能说,因为你没有指定你认为答案 应该 是: 如果答案与正确答案相匹配,则将为您提供布尔值列表。 但是,假设您想要的是正确答案的 索引

  • 我试图比较两个XML文件。我的要求是比较新旧xml文件,如果有任何差异,将其合并到新的xml文件中。 但我也想要差异。请告诉我怎样才能得到不同之处。 我已经尝试过XMLUnit,但我不想使用它。

  • 问题内容: 比较两个数组并返回差值的最快/最佳方法是什么?非常类似于PHP。有一个简单的功能,还是我必须创建一个via ?还是循环? 问题答案: 如果您希望在JQuery中做到这一点,希望对您有所帮助。 最后的警报提示不常见元素数组Array,即2个数组之间的差。 请让我知道我是否错过了任何事情,干杯! 码

  • 我有两个数据帧。示例: 每个数据帧都有日期作为索引。两个数据帧具有相同的结构。 我想做的是比较这两个数据帧,找出df2中哪些行不在df1中。我想比较日期(索引)和第一列(香蕉、苹果等),看看它们是否存在于df2和df1中。 我尝试了以下方法: 两个熊猫数据帧并排输出差异-突出差异 比较两个熊猫数据帧的差异 对于第一种方法,我得到这个错误:"异常:只能比较相同标记的DataFrame对象"。我尝试删

  • 问题内容: 嗨,我有一个LinkedHashMap(称为信息),其中包含名称/年龄(字符串/整数)对。我想找出,如果我输入键,如何获得键/值的位置。例如,如果我的LinkedHashMap看起来像这样{bob = 12,jeremy = 42,carly = 21}并且我要搜索jeremy,它应该返回1作为其位置1。我希望我可以使用诸如info.getIndex这样的东西(“杰里米”) 问题答案:

  • 问题内容: 我有2个数据框,如下所示: 最后,我想得到的是: 因此,我想比较两个数据帧,我想查看第一数据帧(对于列A和B)的哪些行与第二数据帧(列K和L)相同,并在第一数据帧的列D上分配1。 我可以使用for循环,但是输入大量条目会很慢。 任何线索或建议将不胜感激。 问题答案: 这是我解决的方法: