我有两个集合,我需要比较这些列表,并验证除第一个项目以外的所有项目都相同。
下面是我的收藏
def mapA = [a: 'test', b: 'test1', c: 'test2']
def mapB = [a: 'test0', b: 'test1', c: 'test2']
在我的情况下,第一项总是不同的,所以我应该如何验证除第一项[a]以外的上述集合
答案 0 :(得分:1)
有多种方法可以实现。
一种方法是从两个映射中提取密钥集,删除您不感兴趣的密钥,检查两个密钥集是否相同,然后比较两个映射中给定密钥的所有值是否相等。
def mapA = [a: 'test', b: 'test1', c: 'test2']
def mapB = [a: 'test0', b: 'test1', c: 'test2']
def keysA = mapA.keySet() - 'a'
def keysB = mapB.keySet() - 'a'
assert keysA == keysB && keysA.every { key -> mapA[key] == mapB[key] }
您还可以创建两个地图的相交,并检查相交是否具有预期的大小,以及是否不包含您知道具有不同值的键。
def mapA = [a: 'test', b: 'test1', c: 'test2']
def mapB = [a: 'test0', b: 'test1', c: 'test2']
def intersection = mapA.intersect(mapB)
assert intersection.size() == mapA.size() - 1 && !intersection.containsKey('a')
a
键并比较地图另一种实现方法是删除您知道的包含两个映射中不同值的键,然后检查是否相等。请记住,Map.remove(object)
会突变输入映射,因此您可能需要先创建对象的副本。
def mapA = [a: 'test', b: 'test1', c: 'test2']
def mapB = [a: 'test0', b: 'test1', c: 'test2']
mapA.remove('a')
mapB.remove('a')
assert mapA == mapB