我想知道是否有任何方法可以在数组的单次迭代中实现以下内容。只需要有两个不同的结果流出。
double sum = Arrays.stream(doubles).sum();
double sumOfSquares = Arrays.stream(doubles).map(d -> d * d).sum();
答案 0 :(得分: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];
但是我认为你没有太多的可读性,所以我会坚持多次通过解决方案(或者在这种情况下可能只使用for循环)。