相关疑难解决方法(0)

使用Streams添加BigDecimals

我有一个BigDecimals的集合(在这个例子中,a LinkedList)我想加在一起.是否可以使用流?

我注意到这个Stream课有几种方法

Stream::mapToInt
Stream::mapToDouble
Stream::mapToLong
Run Code Online (Sandbox Code Playgroud)

每个都有一个方便的sum()方法.但是,我们知道,floatdouble算术几乎总是一个坏主意.

那么,有没有一种方便的方法来总结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的答案以解决这个问题: …

java bigdecimal java-8 java-stream

158
推荐指数
5
解决办法
11万
查看次数

标签 统计

bigdecimal ×1

java ×1

java-8 ×1

java-stream ×1