例如,如果地图等于:
z = ['x':1, 'y':2]
对于f(2)我希望它成为:
[x':2, 'y':4]
我知道可以使用.each循环完成,问题是是否有更简单的方法。
谢谢
答案 0 :(得分:5)
collectEntries
函数适用于Map
中的所有键和值,并返回带有更新值的 new Map
:< / p>
def z = [x:1, y:2]
z = z.collectEntries{ key, value -> [(key): value*2] }
assert z == [x:2, y:4]
这里有几点说明:
['z':1]
与[z:1]
相同,但后者更加流畅且更易读collectEntries
闭包的返回值必须是地图,所以要小心(key)
,而不仅仅是key
但是,将each()
与单参数闭包一起使用几乎肯定更清晰,如下所示:
def z = [x:1, y:2]
z.each{ it.value = it.value*2 }
assert z == [x:2, y:4]
这种方式更少,并且它会就地修改地图,因此您无需重新分配变量。