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

Groovy 如何在Jenkins声明式流水线的Map列表中高效查询指定key值

实现方案

你只需要提前遍历一次原始Map列表,构建以name为key的索引Map,后续查询就能和普通Map一样高效,无需重复遍历原列表。

核心逻辑

Groovy内置的collectEntries方法可以快速完成索引构建,整个过程仅会遍历一次原始Map列表,后续任意次数的查询都为O(1)复杂度。

完整Jenkins声明式流水线示例

pipeline {
    agent any
    stages {
        stage('批量查询属性') {
            steps {
                script {
                    // 你的原始Map列表
                    def originalMapList = [[name:"Gromit", likes:"cheese", id:1234],
                                           [name:"john", likes:"fries", id:1235],
                                           [name:"lisa", likes:"cake", id:1236],
                                           [name:"carl", likes:"cola", id:1237],
                                           [name:"bob", likes:"burger", id:1238]]
                    // 你需要查询的名称列表
                    def targetNames = ["lisa","carl","bob", "不存在的名称"]
                    
                    // 仅遍历一次原列表,构建name为key的索引Map,value可直接存整条记录或仅存需要的likes、id
                    def nameIndex = originalMapList.collectEntries { item ->
                        [item.name, [likes: item.likes, id: item.id]]
                        // 如果需要保留所有属性,可改成:[item.name, item]
                    }
                    
                    // 批量查询,和普通Map用法完全一致
                    targetNames.each { name ->
                        if (nameIndex.containsKey(name)) {
                            def result = nameIndex[name]
                            echo "查询到${name}的信息:likes=${result.likes}, id=${result.id}"
                        } else {
                            echo "未查询到${name}的相关记录"
                        }
                    }
                }
            }
        }
    }
}

运行输出示例

查询到lisa的信息:likes=cake, id=1236
查询到carl的信息:likes=cola, id=1237
查询到bob的信息:likes=burger, id=1238
未查询到不存在的名称的相关记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:05