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

