我希望通过reduce方法对List<Integer>
中的所有元素进行求和。
在Scala中,我可以这样写:
val result = list.reduce(_ + _)
有没有一种更简洁的方法在Java8中编写此操作?还是我应该按照这种方式编写?
int result = list.reduce((x,y) -> x + y));
我希望通过reduce方法对List<Integer>
中的所有元素进行求和。
在Scala中,我可以这样写:
val result = list.reduce(_ + _)
int result = list.reduce((x,y) -> x + y));
如果你想专门使用reduce,可以使用以下方法:
list.stream().reduce(0, Integer::sum); // will return zero if list is empty
list.stream().reduce(Integer::sum).get(); // will throw an exception if list is empty
由于求和是常见的操作,有多种方法可以实现:
list.stream().mapToInt(x->x).sum(); // mapToInt makes an IntStream
list.stream().collect(summingInt(x->x)); // using a collector
sum()
方法来对IntStream
进行求和操作:int result = list.stream().mapToInt(Integer::intValue).sum();
public static final BinaryOperator<Integer> SUM = Integer::sum;
...
list.reduce(SUM)
这种方式在使用时略微更简洁,但您可以自行决定是否需要提前编写所有所需函数的前期成本。