首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在列表中容纳空值?

在列表中容纳空值?
EN

Stack Overflow用户
提问于 2010-05-21 14:07:56
回答 2查看 1.1K关注 0票数 2

我对Java和Groovy很陌生,下面的Groovy脚本遇到了麻烦。为了便于调试,我创建了这个简化版本的大型脚本。

脚本正在迭代一个列表,试图计算列表中所有对象的值的运行总数。这些对象的部分或全部值可能为空。

脚本

代码语言:javascript
复制
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

}

它会得到以下错误:

代码语言:javascript
复制
Exception thrown: java.lang.NullPointerException

java.lang.NullPointerException
    at Script3$_run_closure1.doCall(Script3:15)
    at Script3.run(Script3:14)

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

谢谢你,贝琪

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-21 14:20:28

只需将totalFunding更改为:

代码语言:javascript
复制
def totalFunding = fields.value.inject(0) {int total, value ->
    total += value ?: 0    
}

value ?: 0是指

代码语言:javascript
复制
value != null ? value : 0

同样在原始函数中,忘记将新值赋回total变量。

票数 4
EN

Stack Overflow用户

发布于 2015-04-20 14:52:59

您也可以在闭包中使用sum,而不是inject

def totalFunding = fields.value.sum { it ?: 0 }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2882754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档