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

Groovy中如何通过键列表从Map中获取对应值

在Groovy中从Map筛选指定键对应值的实现方法

嘿,这个需求在Groovy里其实有好几种简洁又实用的实现方式,我结合你的例子给你详细说说:

假设你的初始数据是:

def listOfKeys = ["one", "two", "three"]
def map = ["one":1,"two":2,"three":3,"four":4]

方法1:最简洁的直接索引(适用于确定所有键都存在的场景)

Groovy对Map的支持非常灵活,你可以直接用键列表作为索引来获取对应值的列表:

def targetValues = map[listOfKeys]
// 输出结果:[1, 2, 3]

如果你的键列表里可能包含Map中不存在的键,这种方式会在对应位置返回null,要是想自动过滤掉这些null值,只需要加上findAll():

def targetValues = map[listOfKeys].findAll()

方法2:先过滤有效键再收集值(更严谨的场景)

如果需要先确保只处理Map中存在的键,你可以先筛选出列表里在Map中存在的键,再收集对应的值:

def validKeys = listOfKeys.findAll { map.containsKey(it) }
def targetValues = validKeys.collect { map[it] }
// 输出结果:[1, 2, 3]

这种方式的好处是可以明确控制哪些键会被处理,避免后续流程中出现null的干扰。


方法3:先获取过滤后的键值对Map再取值

如果你不仅需要值,还想保留键值对的结构,可以先获取包含目标键的子Map,再提取值:

def filteredMap = map.subMap(listOfKeys.findAll { map.containsKey(it) })
def targetValues = filteredMap.values()
// 输出结果:[1, 2, 3]

这种方式适合后续还需要用到键值对的场景,灵活性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:12:31