Groovy 比较除第一项以外的两个系列



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

以下是我的收藏

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

最新更新