Lambda 我可以在Java8中将此表达式转换为streams API表达式吗

Lambda 我可以在Java8中将此表达式转换为streams API表达式吗,lambda,java-8,java-stream,Lambda,Java 8,Java Stream,以下是代码片段: List<Double> dataLeft, List<Double> dataRight; double sumLeft = 0, sumRight = 0; for (int i = 0; i < dataLeft.size(); i++) { sumLeft += dataLeft.get(i)*(dataLeft.size() - i); sumRight += dataRight.get(i)*(dataRight.size()

以下是代码片段:

List<Double> dataLeft, List<Double> dataRight;
double sumLeft = 0, sumRight = 0;
for (int i = 0; i < dataLeft.size(); i++) {
  sumLeft += dataLeft.get(i)*(dataLeft.size() - i);
  sumRight += dataRight.get(i)*(dataRight.size() - i);
}

dataLeft和dataRight大小相同。

当然可以,但您不会获得太多。你甚至会失去可读性,伊姆霍

sumLeft += IntStream.range(0, dataLeft.size()).mapToDouble(i-> dataLeft.get(i) * (dataLeft.size() - i)).sum();
sumRight += IntStream.range(0, dataLeft.size()).mapToDouble(i-> dataRight.get(i) * (dataRight.size() - i)).sum();
那么这个呢:

private double sum(final List<Double> data) {
    final AtomicInteger index = new AtomicInteger(0);
    final int n = data.size();
    return data.stream().mapToDouble(d -> d * (n - index.getAndIncrement())).sum();
}

你能添加更多的数据吗?您尝试执行的操作、代码解释等。您正在从0循环到dataLeft.size。它应该与dataRight.size相同吗?sumLeft和numRight最初是否为零?
sumLeft += sum(dataLeft);
sumRight += sum(dataRight);