java - 比较两个hashmap的hashmap

标签 java hashmap

我有两个 HashMap 的 HashMap 。对于实例让,

HashMap map1 = 键:mapview值:{backgroundimage=字符变化,mapviewname=字符变化,mapviewid=字符} 键:am_mypage_template_mgs 值:{resourceid=integer,pageid=integer} 键:am_tomcatinfo 值:{resourceid=bigint,url=字符变化,sslenabled=字符变化}

还有 HashMap map2 = 键:mapview值:{backgroundimage=字符变化,mapviewname=字符变化,mapviewid=整数} 键:am_mypage_template_mgs 值:{resourceid=integer} 我必须比较这两个并找出map2 中缺少map1 中的哪些键。如果键存在,我必须比较内部映射并将map1的内部映射的键与map2的内部映射进行比较。如果键存在,我必须将与map1 的内部映射对应的值与map2 进行比较。 我的代码是,

map1.entrySet().forEach(entry -> {
        if (map2.containsKey(entry.getKey())) {
            if (entry.getValue().equals(map2.get(entry.getKey()))) {
                count++;
            } else {
                entry.getValue().entrySet().forEach(inside_entry->{
                if(map2.get(entry.getKey()).containsKey(inside_entry.getKey())) {

                    Map<String, String> n = new  HashMap<String, String>();
                    n.putAll(map2.get(entry.getKey()));
                    if((inside_entry.getValue()).equals(map2.get(n))){

                    }
                    else {
                        System.out.println("Tablename1 : "+ entry.getKey() +" Key :"+inside_entry.getKey()+" value : "+inside_entry.getValue());
                    }
                }
                });
                System.out.println(entry.getValue());
            }
        } else {
            System.out.println("\"" + entry.getKey() + "\" entire table is not found");
        }
    });

我的输出应该是这样的,

key am_tomcatinfo in map1 missing in map2 
In am_mypage_template_mgs, pageid in map1 is missing in map2
In mapview, mapviewid=character in map1 is not equal to mapviewid=integer in map2

我应该做什么?

最佳答案

根据您的描述,直接的方法是使用两个映射的 forEach() (而不是 entrySet().forEach())来比较键和值:如下:

map1.forEach((k0, v0) -> {
    if (!map2.containsKey(k0)) {
        System.out.println(String.format("key %s in map1 missing in map2", k0));
    } else {
        v0.forEach((k1, v1) -> {
            if (!map2.get(k0).containsKey(k1)) {
                System.out.println(String.format("In %s, %s in map1 is missing in map2", k0, k1));
            } else {
                if (!v1.equals(map2.get(k0).get(k1))) {
                    System.out.println(String.format("In %s, %s=%s in map1 is not equal to %s=%s in map2", k0, k1, v1, k1, map2.get(k0).get(k1)));
                }
            }
        });
    }
});

控制台输出是

In am_mypage_template_mgs, pageid in map1 is missing in map2
key am_tomcatinfo in map1 missing in map2
In mapview, mapviewid=character in map1 is not equal to mapviewid=integer in map2

关于java - 比较两个hashmap的hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58056895/

相关文章:

java - ArrayList<String>,String的HashMap不正常?

java - 多值 HashMap 值的 "Size or zero"

java - 为什么Hashmap内部使用LinkedList而不是Arraylist

java - 从 Java 中的多重映射中选择最高的 10 个键值

java - 如何拆分字符串并将拆分值分配给数组?

java - <% ... %> 和 <%! 有什么区别? ... %> 在 jsp 中

java - Hibernate 无法实例化抽象类或接口(interface) : java. util.List

java - 解决主机/端口查找的更好设计是什么

Java相当于/usr/lib和/lib?

java - 如何对 HashMap 键进行排序