Groovy比较第一个项目以外的两个集合

时间:2019-07-12 05:46:47

标签: java groovy collections

我有两个集合,我需要比较这些列表,并验证除第一个项目以外的所有项目都相同。

下面是我的收藏

def mapA = [a: 'test', b: 'test1', c: 'test2']
def mapB = [a: 'test0', b: 'test1', c: 'test2']

在我的情况下,第一项总是不同的,所以我应该如何验证除第一项[a]以外的上述集合

1 个答案:

答案 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