首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java 8编写算术运算函数的简捷方法

用Java 8编写算术运算函数的简捷方法
EN

Stack Overflow用户
提问于 2014-11-13 08:15:28
回答 3查看 106关注 0票数 4

我想通过减少List<Integer>中的所有元素求和。

用Scala我可以写

代码语言:javascript
复制
val result = list.reduce(_ + _)

是否有一种在Java8中以如此简洁的方式编写此操作的方法?还是我应该这样写?

代码语言:javascript
复制
int result = list.reduce((x,y) -> x + y));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-13 08:21:07

如果您特别希望使用减缩,则可以这样做:

代码语言:javascript
复制
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

由于总结很常见,有几种方法可以做到:

代码语言:javascript
复制
list.stream().mapToInt(x->x).sum();      // mapToInt makes an IntStream
list.stream().collect(summingInt(x->x)); // using a collector 
票数 7
EN

Stack Overflow用户

发布于 2014-11-13 08:19:05

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

代码语言:javascript
复制
int result = list.stream().mapToInt(Integer::intValue).sum();
票数 3
EN

Stack Overflow用户

发布于 2014-11-13 08:44:02

你在你的问题((x,y) -> x + y))中所表现出来的方式非常简洁,就像对lambdas一样。

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

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

代码语言:javascript
复制
public static final BinaryOperator<Integer> SUM = Integer::sum;
...
list.reduce(SUM)

这种方式在使用站点上稍微简洁一些,但是您可以决定是否需要预先编写所有功能的成本来抵消这些功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26904146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档