我需要检查一个Map数组是否包含另一个
def map1 = [[key1:"value1", key2:"value2"], [key3:"value3", key4:"value4"]]
def map2 = [[key1:"value1", key2:"value2"]]
目前我有方法在地图数组中查找地图并比较它们
def "method"(map2){
def map1 = arrayOfmap
def matches = map1.findAll { map2.contains(it) }
assert matches == map2 //return true
}
现在我想编写一个方法来搜索地图myMap数组并检查myMap中的所有值是否都在map1中找到
例如:
我有
def map1 = [[key1:"value1", key2:"value2"], [key3:"value3", key4:"value4"]]
def map2 = [[key1:"value1"]]
我需要检查map1是否包含map2
答案 0 :(得分:0)
不确定你的意思,但是给出了:
def map1 = [[key1:"value1", key2:"value2"], [key3:"value3", key4:"value4"]]
假设您的意思是map2
中的每个元素必须出现在map1
的其中一个地图中,您可以执行以下操作:
boolean allFoundIn(List<Map> map, List<Map> query) {
query.every { m2 -> map.any { m1 -> m2.every { m2a -> m1[m2a.key] == m2a.value } } }
}
assert allFoundIn(map1, [[key1:'value1']])
assert allFoundIn(map1, [[key3:'value3'], [key2:'value2']])
assert !allFoundIn(map1, [[key1:'value1'], [keyNone:'not found']])
// Multiple values in one map have to all match the same map in the source
assert allFoundIn(map1, [[key1:'value1', key2:'value2']])
assert !allFoundIn(map1, [[key1:'value1', key3:'value3']])
答案 1 :(得分:0)
要查找map1
(位误导示例map1
实际上是列表而不是地图)包含map2
(另一个列表)中的所有元素,您可以使用{{ 1}}方法,containsAll
方法或从intersect
中减去map1
的所有元素,请注意,在部分匹配时,它不会通过,请参阅下面的map2
map3