You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy多数组重复元素查找及空数组兼容方案咨询

多Groovy数组求共同元素的实现方法

核心思路

利用Groovy的inject方法链式计算多个列表的交集,同时先过滤掉空列表,避免空数组干扰结果。

代码实现与场景示例

场景1:所有数组非空

// 注意:元素需用字符串包裹,避免被当作数值表达式计算
def Ids_AS = ['04-04350', '21-005676', 'REGU-132644681']
def Ids_AO = ['04-04350', '04-04356', 'REGU-132644681']
def Ids_AV = ['04-04350', 'AB-132644681', 'REGU-132644681']

// 过滤掉空列表
def nonEmptyLists = [Ids_AS, Ids_AO, Ids_AV].findAll { !it.isEmpty() }

// 链式计算交集:用第一个列表作为初始值,依次和后续列表求交集
def commonElements = nonEmptyLists.isEmpty() ? [] : nonEmptyLists.inject { acc, list -> acc.intersect(list) }

println(commonElements) // 输出:[04-04350, REGU-132644681]

场景2:包含空数组

def Ids_AS = ['04-04350', '21-005676', 'REGU-132644681']
def Ids_AO = ['04-04350', '04-04356', 'REGU-132644681']
def Ids_AV = []

def nonEmptyLists = [Ids_AS, Ids_AO, Ids_AV].findAll { !it.isEmpty() }
def commonElements = nonEmptyLists.isEmpty() ? [] : nonEmptyLists.inject { acc, list -> acc.intersect(list) }

println(commonElements) // 输出:[04-04350, REGU-132644681]

边界情况:所有数组为空

如果传入的所有数组都是空列表,上述代码会返回空列表,避免报错:

def list1 = []
def list2 = []
def list3 = []

def nonEmptyLists = [list1, list2, list3].findAll { !it.isEmpty() }
def commonElements = nonEmptyLists.isEmpty() ? [] : nonEmptyLists.inject { acc, list -> acc.intersect(list) }

println(commonElements) // 输出:[]

关键说明

  • inject方法:将列表的第一个元素作为初始累积值,随后依次与每个后续列表执行intersect操作,逐步得到所有列表的共同元素。
  • 空列表过滤:通过findAll { !it.isEmpty() }排除空数组,确保只会在有效列表间计算交集,符合“空数组不干扰结果,匹配剩余数组重复元素”的需求。
  • 元素格式:原代码中的元素(如04-04350)需用单/双引号包裹为字符串,否则会被Groovy解析为数值运算(八进制数减整数),导致错误结果。

内容的提问来源于stack exchange,提问作者Shahid Ur Rehman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:40:28