BigDecimal的总和列表

时间:2015-10-16 10:19:51

标签: java list collections java-7

我正在开发一个使用Spring和Maven以及Java 7的项目。

我有一个bigdecimal列表,必须总结列表中的所有元素。我知道使用for循环我们可以如下,

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);
}

有更好的方法吗?使用google gauva FluentIterable或apache ArrayUtils / StatUtils?

3 个答案:

答案 0 :(得分:4)

这是一种只使用Java 8和流来实现它的方法:

List<BigDecimal> list = Arrays.asList(new BigDecimal(10.333), //
   new BigDecimal(14.333));
BigDecimal result = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);

答案 1 :(得分:2)

如果你不能使用Java 8 lambdas或Groovy闭包,在这种情况下你可以写一个单行来替换你的四行,你所拥有的代码是完全清楚的。使用基于库的迭代工具几乎肯定会使代码更复杂, 肯定会使代码更慢。你做得很简单;没关系。

答案 2 :(得分:2)

如果您不介意额外的第三方库依赖项,那么Eclipse Collections中就存在解决此问题的方法。

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列表,因此应用于每个函数的函数只传递值。

注意:我是Eclipse Collections的提交者