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

2022-09-03 13:30:19

我正在尝试检查一个地图是否包含另一个地图的所有内容。例如,我有一个,它是一个,元素是:mapAMap<String, List<String>>

"1" -> ["a","b"]
"2" -> ["c","d"]

另一个也是 ,元素是:mapBMap<String, List<String>>

"1" -> ["a"]
"2" -> ["c","d"],

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

最好的方法是什么?


答案 1

在您的方法中,您可以简单地使用:compare(mapA, mapB)

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

答案 2

@Jacob G提供的答案不适用于您的情况。仅当 中存在额外的(键、值)对时,它才有效。喜欢MapA

MapA = {"1" -> ["a","b"] "2" -> ["c","d"] } 

MapB = {"1" -> ["a","b"]  }. 

你需要的是这个:

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