容纳列表中的空值?

时间:2010-05-21 14:07:56

标签: groovy null list

我是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)

容纳空值的正确方法是什么?

谢谢, 贝齐

2 个答案:

答案 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 }