You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Groovy列表元素解析:提取各分支首个name值并支持扩展字段

Groovy解析LUT提取首个分支对应name并支持扩展字段

一、实现基础需求:提取每个branch的首个name

核心思路是用一个Map跟踪已处理的分支,只保留每个分支第一次出现的name值。直接上代码:

def LUT = [ 
    [branch: "test", name: 'a', image_name: 'abc'], 
    [branch: "test", name: 'b', image_name: 'abc'], 
    [branch: "test", name: 'c', image_name: 'abc'], 
    [branch: "test-1", name: 'd', image_name: 'abc'], 
    [branch: "test-1", name: 'e', image_name: 'abc'], 
    [branch: "test-2", name: 'f', image_name: 'abc'], 
    [branch: "test-2", name: 'g', image_name: 'abc'], 
    [branch: "test-2", name: 'h', image_name: 'abc'], 
    [branch: "test-3", name: 'i', image_name: 'abc'], 
    [branch: "test-3", name: 'j', image_name: 'abc'], 
    [branch: "test-4", name: 'k', image_name: 'abc'], 
    [branch: "test-5", name: 'l', image_name: 'abc'], 
]

def result = [:]
LUT.each { entry ->
    def branch = entry.branch
    // 仅当分支未被处理过时,存储首个name
    if (!result.containsKey(branch)) {
        result[branch] = [[name: entry.name]]
    }
}

println result

运行这段代码后,就能得到你期望的基础结果:每个分支对应一个包含首个name的列表。


二、为指定分支添加额外字段

有两种灵活的实现方式,你可以根据场景选择:

方式1:生成结果时直接添加字段

如果提前知道哪些分支需要扩展,可以在初始化结果时直接处理:

def result = [:]
LUT.each { entry ->
    def branch = entry.branch
    if (!result.containsKey(branch)) {
        def nameEntry = [name: entry.name]
        // 针对test-1分支添加新字段,甚至修改name值
        if (branch == "test-1") {
            nameEntry.new_name = "new"
            // 如果需要把name改成"a",就加这句:nameEntry.name = "a"
        }
        result[branch] = [nameEntry]
    }
}

println result

方式2:生成基础结果后动态修改

如果后续才确定要扩展的分支,或者需要动态调整,可以先生成基础结果,再单独修改指定分支:

// 先生成基础结果(和第一步代码一致)
def result = [:]
LUT.each { entry ->
    def branch = entry.branch
    if (!result.containsKey(branch)) {
        result[branch] = [[name: entry.name]]
    }
}

// 对test-1分支添加新字段,或者修改现有字段
result["test-1"][0].new_name = "new"
// 要是需要修改name值:result["test-1"][0].name = "a"

println result

这两种方式都能实现你想要的"test-1": [{ "name":"a", "new_name":"new" }]这类效果,按需选用即可。

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

火山引擎 最新活动