我正在开发一个使用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?
答案 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的提交者