集合<双倍>到双流

2022-09-03 13:42:05

我正在寻找最优雅的方法来创建(用于使用总和,平均值等)。目前我有这样的代码:DoubleStreamList<Double>

List<Double> doubles = getListOfDoubles();
double sum = doubles.stream()
                    .mapToDouble(d -> d)
                    .sum();

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


答案 1

从 中获取统计信息的最佳方法是使用这些类。对于 a,这是 DoubleSummaryStatisticsStream...SummaryStatisticsStream<Double>

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

它是通过使用汇总双收集器收集流而获得的。此收集器采用 as 参数:它是一个应返回要分析的函数。ToDoubleFunctiondouble

可以获得整数多头双精度值的此类统计信息。

请注意,将 a 转换为 a 的一般情况可以使用您已经拥有的代码来完成:Collection<Double>DoubleStream

List<Double> doubles = getListOfDoubles();
DoubleStream stream = doubles.stream().mapToDouble(Double::doubleValue);

答案 2

你可以做(即使它没有明显更短,但是...):

double sum = doubles.stream().collect(Collectors.summingDouble(x -> x));

double sum = DoubleStream.of(doubles.stream().mapToDouble(x->x).toArray()).sum();

但后者或多或少与您的方法相同。