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

Groovy遍历ArrayList,合并同名someData元素的字段

问题解决方案

原定义类

class someData{
def name
def type
def minVal}

数据读取代码

def dataHolder = new ArrayList()

dataHolder.add(new someData(
name: "",
type:"",
minVal:""
))

注:上述空字符串实际由Excel文件中按逗号分割的数据填充,最终dataHolder结构如下:

dataHolder[0]--> name: name1, type:int, minVal:8
dataHolder[1]--> name: name2, type:int, minVal:11
dataHolder[2]--> name: name3, type:int, minVal:8
dataHolder[3]--> name: name4, type:uint32, minVal:8
dataHolder[4]--> name: name4, type:double, minVal:155
dataHolder[5]--> name: name4, type:float, minVal:48
dataHolder[6]--> name: name5, type:long, minVal:2855

需求

遍历dataHolder并生成新列表newArrList,规则如下:

  • 若当前索引[i]的name与[i+1]不同,直接将该元素加入新列表;
  • 若name相同,合并对应元素的type和minVal字段。

最终期望的newArrList结构:

newArrList[0]--> name: name1, type:int, minVal:8
newArrList[1]--> name: name2, type:int, minVal:11
newArrList[2]--> name: name3, type:int, minVal:8
newArrList[3]--> name: name4, type:uint32,double,float minVal:8,155,48
newArrList[4]--> name: name5, type:long, minVal:2855

允许的修改

仅可将someData类修改为集合字段版本:

class someData{
def name = new ArrayList()
def type = new ArrayList()
def minVal = new ArrayList()
}

实现代码

1. 更新someData类

先替换为允许的集合类型定义:

class someData{
    def name = new ArrayList()
    def type = new ArrayList()
    def minVal = new ArrayList()
}

2. 遍历合并逻辑

def newArrList = new ArrayList()

if(dataHolder.isEmpty()) {
    return newArrList
}

// 初始化第一个待合并元素
def currentItem = new someData()
currentItem.name.add(dataHolder[0].name)
currentItem.type.add(dataHolder[0].type)
currentItem.minVal.add(dataHolder[0].minVal)

for(int i = 1; i < dataHolder.size(); i++) {
    def item = dataHolder[i]
    if(item.name == currentItem.name[0]) {
        // name相同,合并type和minVal
        currentItem.type.add(item.type)
        currentItem.minVal.add(item.minVal)
    } else {
        // name不同,将当前合并完成的元素加入新列表,初始化新的待合并元素
        newArrList.add(currentItem)
        currentItem = new someData()
        currentItem.name.add(item.name)
        currentItem.type.add(item.type)
        currentItem.minVal.add(item.minVal)
    }
}
// 加入最后一个待合并元素
newArrList.add(currentItem)

3. 格式转换(可选)

如果需要将集合字段转为逗号分隔的字符串(与期望输出格式完全匹配),可执行以下处理:

newArrList.each { item ->
    item.name = item.name[0] // 合并后name集合仅存一个值,直接取单个元素
    item.type = item.type.join(',')
    item.minVal = item.minVal.join(',')
}

内容的提问来源于stack exchange,提问作者seplo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:40:16