我有两个集合,我需要比较那些list并验证所有项目是否相同,除了第一项。
下面是我的收藏
def mapA = [a: 'test', b: 'test1', c: 'test2']
def mapB = [a: 'test0', b: 'test1', c: 'test2']
在我的情况下,第一项始终不同,所以除了第一项[a]外,我应如何验证上述集合
分析解答
有多种方法可以做到这一点。
比较键集
一种方法是从两个映射中提取密钥集,删除您不感兴趣的密钥,检查两个集是否相同,然后比较两个映射中给定键的所有值是否相等。
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