gpt4 book ai didi

kotlin - sumByDouble 需要 Double 找到 Double?

转载 作者:行者123 更新时间:2023-12-02 12:19:54 25 4
gpt4 key购买 nike

我有以下代码:

materialList.sumByDouble { elem -> elem.let { it.getPrice()?.toDouble() * it.getQuantity()?.toDouble() }}

Type mismatch. Required: Double, Found: Double?

为什么会出现这种错误?我已经用 elem.let 语句删除了可选的,不是吗?

最佳答案

尝试以下操作:

materialList.sumByDouble { elem -> elem.let { it.getPrice()?.toDouble() ?: 0.0 * it.getQuantity()?.toDouble() ?: 0.0 }

上面的代码所做的是,如果其中任何一个被评估为 null,则分配一个默认值 0.0(确切地说,它将 0.0 分配给被评估为 null 的值)

这样做的原因是因为您的 it.getPrice()? 以及您的 it.getQuantity()? 可能为空,所以它的作用是本质上和这个一样(全是伪代码)

if(it.getQuantity() == null){
use 0.0 to perform this calculation
} else {
use it.getQuantity()
}

什么类型不匹配。 Required: Double, Found: Double? 这就是说,该方法需要一个非空的 double 值,而您提供的可能是空值


旁注:

I've already removed the optional with the elem.let statement, no?

这样做:

{ elem -> elem.let { stillPotentiallyNull ->

只是一种确保您获得 elem 实例的方法,该实例不能被线程更改,但是,如果您这样做:

{ elem -> elem?.let { definitelyNotNull ->

然后你得到一个 elem 的实例,它既对线程安全又不能为空,但这并不意味着 elem 中的对象也不为空


正如@AjahnCharles 所指出的,这个答案只是为了解释您遇到此问题的原因以及可能如何使用默认值来解决它,但是,您应该考虑如何将列表过滤为非空对象另一种解决方案。

一个潜在的解决方案,尽管它很危险,是使用以下方法:

it.getPrice()!!.toDouble() * it.getQuantity()!!.toDouble()

这就是说您 100% 确定这些值不为空,如果它们为空,则会抛出空指针异常。

您可能会发现有用的额外文档:https://kotlinlang.org/docs/reference/null-safety.html

关于kotlin - sumByDouble 需要 Double 找到 Double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57653334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com