Groovy - 获取键列表的映射值

时间:2013-10-10 01:01:42

标签: groovy

不是获取键的映射值,而是获取键列表或键集的所有值。

2 个答案:

答案 0 :(得分:1)

def map = [1:"A", 2:"B", 3:"C", 4:"D"]
def keySet = [1, 2, 3]

assert ['A', 'B', 'C'] == keySet.collect{map[it]}
assert ['A', 'B', 'C'] == map.collectMany{k,v -> k in keySet ? [v] : []}
assert ['A', 'B', 'C'] == map.findResults{k,v -> k in keySet ? v : null}

如果我花一些时间来解决这个问题,那么其他方法就会很少。 :)

答案 1 :(得分:0)

我认为您正在寻找强大的Python切片等方便的方法。在groovy中,用于获取密钥列表的当前方法subMap

Map m = [one: 1, two: 2, three: 3, four: 4]

m.subMap(['two', 'three'])
// Off course with groovy flexible syntax you may do simple:
m.subMap('two', 'three')
// Or even:
m.subMap 'two', 'three', 'non-existent'

两种变体都将返回['two':2, 'three':3]

如果我们请求不存在的密钥也不会有错误。

作为参数,您可以真正提供任何集合List,例如Range也可能非常有用。

您可以在Klein Ikkink博文中找到一些其他示例:http://mrhaki.blogspot.ru/2009/10/groovy-goodness-getting-submap-from-map.html