我正在做一个使用Spring、Maven和Java7的项目。
我有一个带有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);
}
有没有更好的办法呢?使用谷歌gauva FluentIterable或apache ArrayUtils/StatUtils?
发布于 2016-08-03 20:39:08
这里有一种仅使用Java 8和streams就可以做到的方法:
List<BigDecimal> list = Arrays.asList(new BigDecimal(10.333), //
new BigDecimal(14.333));
BigDecimal result = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
发布于 2015-10-16 18:35:55
如果您不能使用Java 8 lambdas或Groovy闭包,在这种情况下,您可以编写一行代码来替换您的四行代码,您所拥有的代码是完全清晰的。使用基于库的迭代工具几乎肯定会使代码变得更加复杂,并且肯定会使其变得更慢。你让它变得尽可能简单;它很好。
发布于 2016-02-22 15:11:37
如果你不介意额外的第三方库依赖,那么在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列表,所以应用于每个a的函数只是传递该值。
注意:我是Eclipse Collections的提交者
https://stackoverflow.com/questions/33168049
复制相似问题