groovy - 使用 findAll 和 groovy 中的 every 更新 map

标签 groovy

我想更新 Groovy 中 map 中的值以满足某些条件。这是我的代码:

def m = [:]
m['a'] = 1
m['b'] = 2
m['d'] = 3
m.findAll { it.value > 1}.each { 
it.value = 4
}
println m

但结果如下:

[a:1, b:2, d:3]

有没有办法同时使用findAll和each来做到这一点?或者我必须使用

m.each {if (it.value>1) it.value=4}

最佳答案

根本原因是findAll返回一个新的Map实例

所以你可以尝试:

newMap = m.findAll { it.value > 1}.each { 
    it.value = 4
}
println m      //No change
println newMap //This is what you need!

输出为

[a:1, b:2, d:3] 
[b:4, d:4]

关于groovy - 使用 findAll 和 groovy 中的 every 更新 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481006/

相关文章:

parsing - XmlSlurper解析查询结果

groovy - 如何使用 groovy 更改端点 url

elasticsearch - Elasticsearch-执行Groovy脚本时出现error_access_exception错误

grails - Griffon Gsql-如何在Config.properties文件中配置数据源?

groovy - 使用 Final 字段对 Groovy 生成的 getter 进行 Spock 调用

java - groovy + 如何匹配参数中的行

java - 应用日期模式一段表达式

java - Groovy GroupBy 变量键集

grails - Grails:将字符串(用户名)用作主键,但是使用ignorecase保存并获取ID字符串(用户名)吗?

gradle - 使用 Gradle 无需编译 Groovy 源代码即可生成 groovydoc