我是Java和Groovy的新手,并且使用以下Groovy脚本遇到了麻烦。我创建了这个较大脚本的缩小版本以便于调试。
脚本正在遍历列表,尝试计算列表中所有对象的运行总计。这些对象中的部分或全部值可能为空。
class Field {
def name
def value
}
def fields = [
new Field(name:'Annuities %', value:75),
new Field(name:'Other %', value:null),
]
def totalFunding = fields.inject(0) {int total, Field myField ->
total + myField?.value as Integer
}
收到此错误:
Exception thrown: java.lang.NullPointerException
java.lang.NullPointerException
at Script3$_run_closure1.doCall(Script3:15)
at Script3.run(Script3:14)
容纳空值的正确方法是什么?
谢谢, 贝齐
答案 0 :(得分:3)
只需将totalFunding
更改为:
def totalFunding = fields.value.inject(0) {int total, value ->
total += value ?: 0
}
value ?: 0
是
value != null ? value : 0
同样在原始功能中,您忘记将新值分配回total
变量
答案 1 :(得分:0)
您还可以将sum
与闭包一起使用,而不是inject
:
def totalFunding = fields.value.sum { it ?: 0 }