Groovy:过滤ArrayList中在另一ArrayList内存在的完全相同数组元素
实现方案
Groovy 对集合操作提供了原生语法支持,针对你的需求可以直接用以下两种方式实现:
方案1:生成新的结果集合(不修改原file1data)
直接使用集合减运算符-,会自动移除file1data中所有在file2data中存在的完全匹配条目:
def filteredFile1Data = file1data - file2data
方案2:直接修改原file1data
调用removeAll方法直接对原集合做修改:
// 数据量较小时直接使用 file1data.removeAll(file2data)
如果file2data数据量较大(万条以上),可以先转为Set提升匹配效率,避免每次匹配全量遍历file2data:
// 大数据量优化版本 def file2DataSet = file2data.toSet() file1data.removeAll(file2DataSet)
额外优化建议
你原来构建两个列表的代码可以用Groovy的collect方法简化,无需手动初始化空列表遍历追加元素:
def file1data = sourceJson1.Records.collect { recs -> [recs.cus_RBCounterpartyID_2wtne0, recs.AffectedParties[0].AffectedParties.SourceSystem] } def file2data = sourceJson2.Records.collect { recs2 -> [recs2.cus_RBCounterpartyID_2wtne0, recs2.AffectedParties[0].AffectedParties.SourceSystem] }
效果验证示例
// 测试数据 def file1data = [["123", "SYS_A"], ["456", "SYS_B"], ["789", "SYS_C"]] def file2data = [["456", "SYS_B"], ["000", "SYS_A"]] file1data.removeAll(file2data) // 执行后 file1data 结果为:[["123", "SYS_A"], ["789", "SYS_C"]]
内容的提问来源于stack exchange,提问作者Stephen Bentley
相关产品推荐
相关产品推荐

