This question already has answers here:
How do I get an IntStream from a List<Integer>?

(2个答案)


5年前关闭。




我正在寻找从DoubleStream创建List<Double>(用于使用求和,平均值等)的最优雅的方法。目前,我有这样的代码:
List<Double> doubles = getListOfDoubles();
double sum = doubles.stream()
                    .mapToDouble(d -> d)
                    .sum();

也许有人可以建议一个更短的方法?

最佳答案

Stream获取统计信息的最佳方法是使用...SummaryStatistics类。对于Stream<Double>,这是 DoubleSummaryStatistics :

List<Double> doubles = getListOfDoubles();
DoubleSummaryStatistics stats = doubles.stream().collect(Collectors.summarizingDouble(Double::doubleValue));
System.out.println(stats.getAverage());
System.out.println(stats.getSum());

通过使用 summarizingDouble 收集器收集流来获得它。该收集器将ToDoubleFunction作为参数:这是一个应返回double进行分析的函数。

可以针对 Integer Long Double 值获得此类统计信息。

请注意,将Collection<Double>转换为DoubleStream的一般情况可以通过您已有的代码来完成:
List<Double> doubles = getListOfDoubles();
DoubleStream stream = doubles.stream().mapToDouble(Double::doubleValue);

07-26 03:02