我想在Groovy中更新地图中的值来填充某些条件.这是我的代码:
def m = [:]
m['a'] = 1
m['b'] = 2
m['d'] = 3
m.findAll { it.value > 1}.each {
it.value = 4
}
println m
Run Code Online (Sandbox Code Playgroud)
但结果如下:
[a:1, b:2, d:3]
Run Code Online (Sandbox Code Playgroud)
有没有办法同时使用findAll和each?或者我必须使用
m.each {if (it.value>1) it.value=4}
Run Code Online (Sandbox Code Playgroud)
卢声远*_* Lu 11
根本原因是findAll返回一个新的Map实例.
所以你可以尝试:
newMap = m.findAll { it.value > 1}.each {
it.value = 4
}
println m //No change
println newMap //This is what you need!
Run Code Online (Sandbox Code Playgroud)
输出是
[a:1, b:2, d:3]
[b:4, d:4]
Run Code Online (Sandbox Code Playgroud)
在每种情况下,您正在迭代的值都是each带有指向键和值的指针的映射条目。设置时,it.value您不会替换地图中的内容。您只是在更新地图条目中的指针。要实际设置该值,您需要执行以下操作:
m.findAll { it.value > 1 }.each { m[it.key] = 4 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12055 次 |
| 最近记录: |