将streamsum()方法应用于List的N个不同字段,在一次迭代中得到N个sum结果


class A
{
Integer a;
Integer b;
Integer c;
}
List<A> inputList= func();
X x=new X();
int sumA = inputList.stream().mapToInt(e->e.getA()).sum();
int sumB = inputList.stream().mapToInt(e->e.getB()).sum();
int sumC = inputList.stream().mapToInt(e->e.getC()).sum();
x.setSumA(sumA);
x.setSumB(sumB);
x.setSumC(sumC);

这将解决它,但我想在一次迭代中执行三次迭代,而不使用仅使用流的for循环。

您可以使用reduce来计算单个Stream管道中的3个和:

X sums = inputList.stream()
.reduce(new X(0,0,0),
(x,e) -> new X(x.getSumA()+e.getA(),
x.getSumB()+e.getB(),
x.getSumC()+e.getC()),
(x1,x2) -> new X(x1.getSumA()+x2.getSumA(),
x1.getSumB()+x2.getSumB(),
x1.getSumC()+x2.getSumC()));

最新更新