Jam*_*udd 2 java optional java-stream
我有一个计算平均成本的流,代码看起来像这样
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
}
Run Code Online (Sandbox Code Playgroud)
我需要返回值或null没有值的方法(例如,当所有成本为零时)。我的问题是不存在orElseNull的方法OptionalDouble做转换。我可以在另一个步骤中完成,例如
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;
}
Run Code Online (Sandbox Code Playgroud)
我意识到这是一个“原始”流,我的方法返回盒装,Double但看起来这可能会有所帮助,类似于 ( Optional.empty().orElseGet(null))。
我缺少原因或更好的解决方案吗?
Mic*_*ael 13
OptionalDouble包含一个原始双精度。如果你想要一个可选的包裹双精度,你可以使用Optional<Double>. 原语不能为空,所以orElseNull没有意义。
至于如何在两者之间进行转换,这里已经有了答案:Convert OptionalDouble to Optional <java.lang.Double>。TL;DR 目前还没有好的、原生的方式来做到这一点。等待瓦尔哈拉。