我有一个BigDecimals的集合(在这个例子中,a LinkedList)我想加在一起.是否可以使用流?
我注意到这个Stream课有几种方法
Stream::mapToInt
Stream::mapToDouble
Stream::mapToLong
Run Code Online (Sandbox Code Playgroud)
每个都有一个方便的sum()方法.但是,我们知道,float和double算术几乎总是一个坏主意.
那么,有没有一种方便的方法来总结BigDecimals?
这是我到目前为止的代码.
public static void main(String[] args) {
LinkedList<BigDecimal> values = new LinkedList<>();
values.add(BigDecimal.valueOf(.1));
values.add(BigDecimal.valueOf(1.1));
values.add(BigDecimal.valueOf(2.1));
values.add(BigDecimal.valueOf(.1));
// Classical Java approach
BigDecimal sum = BigDecimal.ZERO;
for(BigDecimal value : values) {
System.out.println(value);
sum = sum.add(value);
}
System.out.println("Sum = " + sum);
// Java 8 approach
values.forEach((value) -> System.out.println(value));
System.out.println("Sum = " + values.stream().mapToDouble(BigDecimal::doubleValue).sum());
System.out.println(values.stream().mapToDouble(BigDecimal::doubleValue).summaryStatistics().toString());
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我正在总结BigDecimals BigDecimal::doubleValue(),但这(正如预期的那样)并不准确.
后代的回答后编辑:
这两个答案都非常有帮助.我想补充一点:我的现实场景不涉及原始集合BigDecimal,它们包含在发票中.但是,通过使用map()流的功能,我能够修改Aman Agnihotri的答案以解决这个问题: …