我有两个集合,我需要比较那些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