将 OptionalDouble 转换为 Optional <java.lang.Double>

2022-09-02 09:55:51

我有一个构建列表的方法,我希望它返回列表的平均值作为可选值。

但是,当我使用Java 8计算平均值时,我总是将返回值作为可选Double。

如何转换

OptionalDouble to Optional<Double>?

以下是我用于平均计算的代码:

private static Optional<Double> averageListValue() {
     // Build list
     List<Double> testList = new ArrayList<>();
     testList.add(...);
     ...
     ...


     return testList.stream().mapToDouble(value -> value).average();
}

谢谢。


答案 1

我会选择这种方法:

private static Optional<Double> convert(OptionalDouble od) {
    return od.isPresent() ? 
        Optional.of(od.getAsDouble()) : Optional.empty();
}

答案 2

@Andremoniy的答案略有不同,就是跳过并使用收集器:DoubleStreamaveragingDouble()

if (testList.isEmpty()) {
    return Optional.empty();
}
return Optional.of(testList.stream().collect(Collector.averagingDouble()));

或者考虑 0 是否是空列表的有效返回值,并可能完全跳过。Optional


推荐