在Java8中编写算术运算函数的简明方法

在Java8中编写算术运算函数的简明方法,java,functional-programming,java-8,Java,Functional Programming,Java 8,我想通过reduce对列表中的所有元素求和 用Scala我可以写 val result = list.reduce(_ + _) 有没有办法在Java8中以如此简洁的方式编写此操作?还是我应该这样写 int result = list.reduce((x,y) -> x + y)); 您可以使用IntStream的预定义sum(): int result = list.stream().mapToInt(Integer::intValue).sum(); 如果您特别想使用reduce

我想通过reduce对
列表中的所有元素求和

用Scala我可以写

val result = list.reduce(_ + _)
有没有办法在Java8中以如此简洁的方式编写此操作?还是我应该这样写

int result = list.reduce((x,y) -> x + y));

您可以使用
IntStream
的预定义
sum()

int result = list.stream().mapToInt(Integer::intValue).sum();

如果您特别想使用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 

您在问题中所展示的方式(
(x,y)->x+y)
)与lambdas一样简洁

装箱原语的类具有执行某些算术运算的静态方法,尽管并非所有方法都可用。存在的方法可以与方法引用一起使用,例如
Integer::sum

还有一种方法是自己定义函数并将其传递给方法:

public static final BinaryOperator<Integer> SUM = Integer::sum;
...
list.reduce(SUM)
公共静态最终二进制运算符SUM=Integer::SUM;
...
减少(总和)
这种方法在使用站点上稍微简洁一些,但是您可以决定写出所有需要的函数的前期成本是否会抵消这一点