检查地图是否包含另一个地图的所有内容

时间:2017-04-04 20:26:03

标签: java

我正在尝试检查地图是否包含另一个地图的所有内容。 例如,我有一个mapA,它是Map<String, List<String>>,元素是: “1” - &gt; [ “一”, “B”] “2” - &gt; [ “C”, “d”]

另一个MapB也是Map<String, List<String>>,元素是: “1” - &gt; [“一个”] “2” - &gt; [ “C”, “d”],

我想创建一个函数比较(mapA,mapB),在这种情况下将返回false。

这样做的最佳方式是什么?

由于

4 个答案:

答案 0 :(得分:5)

compare(mapA, mapB)方法中,您只需使用:

return mapA.entrySet().containsAll(mapB.entrySet());

答案 1 :(得分:1)

由@Jacob G提供的答案在您的情况下无法工作,只有在MapA中有额外的(键,值)对时它才会起作用。喜欢 - MapA = {1&#34; - &GT; [&#34; a&#34;,&#34; b&#34;]&#34; 2&#34; - &GT; [&#34; c&#34;,&#34; d&#34;]}和MapB = {1&#34; - &GT; [&#34; a&#34;,&#34; b&#34;]}。

你需要的是这个 -

 boolean isStrictlyDominate(LinkedHashMap<Integer, HashSet<Integer>> firstMap, LinkedHashMap<Integer, HashSet<Integer>> secondMap){
    for (Map.Entry<Integer, HashSet<Integer>> item : secondMap.entrySet()) {
        int secondMapKey = item.getKey();
        if(firstMap.containsKey(secondMapKey)) {
            HashSet<Integer> secondMapValue = item.getValue();
            HashSet<Integer> firstMapValue = firstMap.get(secondMapKey) ;
            if(!firstMapValue.containsAll(secondMapValue)) {
                return false;
            }

        }
    }
    return !firstMap.equals(secondMap);
}

(如果你不想检查严格的统治,那么returnreturn陈述时只有res/layout/my_layout.xml res/layout-small/my_layout.xml res/layout-large/my_layout.xml res/layout-xlarge/my_layout.xml

答案 2 :(得分:0)

试试这个代码:

Assert.assertTrue(currentMap.entrySet().containsAll(expectedMap.entrySet()));

答案 3 :(得分:0)

你可以试试这个。

static boolean compare(Map<String, List<String>> mapA, Map<String, List<String>> mapB){
        return mapA.entrySet().containsAll(mapB.entrySet());
    }

假设,提供的数据是这样的:

            Map<String, List<String>> mapA = new HashMap<>();
            Map<String, List<String>> mapB = new HashMap<>();

            mapA.put("1", Arrays.asList("a","b"));
            mapA.put("2", Arrays.asList("c","d"));

            mapB.put("1", Arrays.asList("a"));
            mapB.put("2", Arrays.asList("c", "d"));

            System.out.println(compare(mapA, mapB));

在这种情况下,compare(mapA, mapB) 方法将返回 false。 但假设提供的数据是这样的:

            Map<String, List<String>> mapA = new HashMap<>();
            Map<String, List<String>> mapB = new HashMap<>();

            mapA.put("1", Arrays.asList("a","b"));
            mapA.put("2", Arrays.asList("c","d"));

            mapB.put("1", Arrays.asList("a", "b"));
            mapB.put("2", Arrays.asList("c", "d"));

            System.out.println(compare(mapA, mapB));

在这种情况下,我编写的 compare(mapA, mapB) 方法将返回 true。

compare(mapA, mapB) 方法基本上用mapB检查mapA中的所有条目,如果相同返回yes,否则返回false;