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
相关产品推荐
相关产品推荐

