使用Streams同时计算总和和平方和

Hec*_*ssa 5 java java-8 java-stream

我想知道是否有任何方法可以在阵列上的单次迭代中实现以下内容.只需要有两个不同的结果流出.

double sum = Arrays.stream(doubles).sum();
double sumOfSquares = Arrays.stream(doubles).map(d -> d * d).sum();
Run Code Online (Sandbox Code Playgroud)

Ale*_* C. 13

那么,您可以使用自定义收集器,例如:

double[] res =
    Arrays.stream(doubles)
          .collect(() -> new double[2],
                   (arr, e) -> {arr[0]+=e; arr[1]+=e*e;},
                   (arr1, arr2) -> {arr1[0]+=arr2[0]; arr1[1]+=arr2[1];});

double sum = res[0];
double sumOfSquares = res[1];
Run Code Online (Sandbox Code Playgroud)

但是我认为你没有太多的可读性,所以我会坚持使用多遍解决方案(或者在这种情况下可能只使用for循环).