首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BigDecimal求和列表

BigDecimal求和列表
EN

Stack Overflow用户
提问于 2015-10-16 18:19:51
回答 3查看 11.8K关注 0票数 6

我正在做一个使用Spring、Maven和Java7的项目。

我有一个带有bigdecimal的列表,并且必须对列表中的所有元素求和。我知道我们可以像下面这样使用for循环,

代码语言:javascript
运行
复制
List<BigDecimal> list = new ArrayList<BigDecimal>();
list.add(new BigDecimal(10.333));
list.add(new BigDecimal(14.333));
BigDecimal result = new BigDecimal(0);
for (BigDecimal b : list) {
     result = result.add(b);
}

有没有更好的办法呢?使用谷歌gauva FluentIterable或apache ArrayUtils/StatUtils?

EN

回答 3

Stack Overflow用户

发布于 2016-08-03 20:39:08

这里有一种仅使用Java 8和streams就可以做到的方法:

代码语言:javascript
运行
复制
List<BigDecimal> list = Arrays.asList(new BigDecimal(10.333), //
   new BigDecimal(14.333));
BigDecimal result = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
票数 6
EN

Stack Overflow用户

发布于 2015-10-16 18:35:55

如果您不能使用Java 8 lambdas或Groovy闭包,在这种情况下,您可以编写一行代码来替换您的四行代码,您所拥有的代码是完全清晰的。使用基于库的迭代工具几乎肯定会使代码变得更加复杂,并且肯定会使其变得更慢。你让它变得尽可能简单;它很好。

票数 3
EN

Stack Overflow用户

发布于 2016-02-22 15:11:37

如果你不介意额外的第三方库依赖,那么在Eclipse Collections中有一个解决这个问题的方法。

代码语言:javascript
运行
复制
List<BigDecimal> list =
    Lists.mutable.with(
        new BigDecimal("10.333"),
        new BigDecimal("14.333"));

Assert.assertEquals(
    new BigDecimal("24.666"),
    Iterate.sumOfBigDecimal(list, Functions.getPassThru()));

因为您已经有了一个BigDecimal列表,所以应用于每个a的函数只是传递该值。

注意:我是Eclipse Collections的提交者

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

https://stackoverflow.com/questions/33168049

复制
相关文章

相似问题

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