Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BigDecimal的和列表_Java_List_Collections_Java 7 - Fatal编程技术网

Java BigDecimal的和列表

Java BigDecimal的和列表,java,list,collections,java-7,Java,List,Collections,Java 7,我正在从事一个使用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

我正在从事一个使用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);
}
List List=new ArrayList();
添加(新的BigDecimal(10.333));
添加(新的BigDecimal(14.333));
BigDecimal结果=新的BigDecimal(0);
for(BigDecimal b:列表){
结果=结果。添加(b);
}

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

如果您不能使用Java 8 lambdas或Groovy闭包,在这种情况下,您可以编写一行代码来替换四行代码,那么您的代码就非常清楚了。使用基于库的迭代工具几乎肯定会使代码更加复杂,也肯定会使其速度变慢。你让事情变得尽可能简单;这很好。

如果您不介意额外的第三方库依赖性,那么中有一个解决此问题的方法

列表=
Lists.mutable.with(
新的BigDecimal(“10.333”),
新的大十进制(“14.333”);
Assert.assertEquals(
新的BigDecimal(“24.666”),
Iterate.sumOfBigDecimal(list,Functions.getPassThru());
由于您已经有一个BigDecimal列表,因此应用于每个列表的函数只传递值


注意:我是Eclipse集合的提交者

这里有一种只使用Java 8和流的方法:

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

@kkkk是。这就是BigDecimal.add()。我想迭代列表并添加。因此,我想让api成为可流通的。我认为您的解决方案简洁明了。你为什么要改变它?也许您应该选择Java8及其
流API
。否则,您的代码是好的。@Flown是的,我知道java 8中的流。但我现在无法将我的应用程序迁移到Java8。正如我所说的,当在String
list.add(新的BigDecimal(
“10.333”);上使用构造函数时,我想使用一些think-like-FluentTableBigDecimal将知道3的精度,总和将是正确的。您可以立即将双倍近似误差导入总和。对于这个问题:没有更好的方法了,因为BigDecimal是不可变的。Java8将允许并行流添加。好的,用替换初始值
新的BigDecimal(0)
,但仅此而已。没有什么可以改进的了…
List<BigDecimal> list = Arrays.asList(new BigDecimal(10.333), //
   new BigDecimal(14.333));
BigDecimal result = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);