gpt4 book ai didi

java - 为什么没有 OptionalDouble orElseNull() 或更好的解决方案

转载 作者:行者123 更新时间:2023-12-05 08:21:59 27 4
gpt4 key购买 nike

我有一个计算平均成本的流代码看起来像这样

private Double calculateAverageCost(List<Item> items) {
return items.stream()
.mapToDouble(item -> item.cost)
.filter(cost -> cost > 0) // Ignore zero cost items
.average()
. // Something here to convert an OptionalDouble to value or null
}

如果没有值(例如,当所有成本为零时),我需要返回值或 null 的方法。我的问题是 OptionalDouble 上没有 orElseNull 方法来进行转换。我可以在另一个步骤中完成,例如

private Double calculateAverageCost(List<Item> items) {
final OptionalDouble average = items.stream()
.mapToDouble(item -> item.cost)
.filter(cost -> cost > 0) // Ignore zero cost items
.average();
return average.isPresent() ? average.getAsDouble() : null;
}

我意识到这是一个“原始”流,我的方法正在返回盒装 Double 但看起来这可能会有帮助,类似于 (Optional.empty().orElseGet(空))。

我是否缺少原因或更好的解决方案?

最佳答案

OptionalDouble包含一个primitive double。如果你想要一个可选的包装双你可以使用 Optional<Double> .原语不能为空,所以 orElseNull没有意义。

至于两者之间如何转换,这里已经有了答案:Convert OptionalDouble to Optional <java.lang.Double> . TL;DR 目前还没有很好的本地方法来做到这一点。等待valhalla .

关于java - 为什么没有 OptionalDouble orElseNull() 或更好的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67490088/

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