在列表中容纳空值?

发布于 2024-09-02 09:09:58 字数 673 浏览 4 评论 0原文

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

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

谢谢, 贝特西

I'm new to Java and Groovy and am running into trouble with the following Groovy script. I created this whittled down version of a larger script to facilitate debugging.

The script is iterating through a list trying to calc a running total of the values of all objects in the list. Some or all of these objects' values may be null.


Script

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

}

It gets this error:

Exception thrown: java.lang.NullPointerException

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

What is the correct way to accomodate null values?

Thanks,
Betsy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不离久伴 2024-09-09 09:09:58

只需将 totalFunding 更改为:

def totalFunding = fields.value.inject(0) {int total, value ->
    total += value ?: 0    
}

value ?: 0 是简写

value != null ? value : 0

另外,在您的原始函数中,您忘记将新值分配回 total多变的

Just change totalFunding to:

def totalFunding = fields.value.inject(0) {int total, value ->
    total += value ?: 0    
}

value ?: 0 is shorthand for

value != null ? value : 0

Also in your original function, you forgot to assign the new value back to the total variable

跨年 2024-09-09 09:09:58

您还可以将 sum 与闭包一起使用,而不是 inject

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

you could also use sum with a closure, instead of inject:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文