如何用 StreamAPI 处理 BigDecimal 的 add 操作

微信扫一扫,分享到朋友圈

如何用 StreamAPI 处理 BigDecimal 的 add 操作

点击上方蓝色“
程序猿DD
”,选择“设为星标”

回复“
资源
”获取独家整理的学习资料!


来源 |  公众号「锅外的大佬」

1. 引言

我们通常使用Java  Stream API  来处理数据集合。

一个不错的特性是支持对数字流的操作,比如 sum
操作。但是, 我们不能以这种方式处理所有数值类型

在本文中,我们将了解如何对诸如 BigDecimal
之类的数字流执行 sum
操作。

2. 如何用流求和

Stream API 提供数字流 numbers Stream,包括
IntStream、DoubleStream、
LongStream

我们通过创建一个数字流来来搞清楚它们是如何工作的。然后,我们用  [IntStream#sum]
计算它的总数:

IntStream intNumbers = IntStream.range(0, 3);

assertEquals(3, intNumbers.sum());

我们可以从 Double
s的列表开始执行类似的操作。通过使用streams,我们可以使用  mapToDouble
将对象流转换为 Double stream

List<Double> doubleNumbers = Arrays.asList(23.48, 52.26, 13.5);

double result = doubleNumbers.stream()

.mapToDouble(Double::doubleValue)

.sum();

assertEquals(89.24, result, .1);

所以,如果我们能用同样的方法总结出一组 BigDecimal
数字,那就很有用了。

**不幸的是,没有BigDecimalStream。**所以,我们需要另一个解决方案。

3. 使用Reduce添加 BigDecimal
数字

我们使用 *Stream.reduce*来计算sum:

Stream<Integer> intNumbers = Stream.of(5, 1, 100);

int result = intNumbers.reduce(0, Integer::sum);

assertEquals(106, result);

这适用于任何可以逻辑相加的数据,包括 BigDecimal

Stream<BigDecimal> bigDecimalNumber =

Stream.of(BigDecimal.ZERO, BigDecimal.ONE, BigDecimal.TEN);

BigDecimal result = bigDecimalNumber.reduce(BigDecimal.ZERO, BigDecimal::add);

assertEquals(11, result);

reduce
方法有两个参数:

  • Identity
    – 等于 0
    –它是还原的起始值

  • Accumulator function
    – 接受两个参数,目前为止的结果,以及流的下一个元素

4. Conclusion

本文中,我们研究了如何在数字
中计算数字之和。以及如何使用 reduce
作为替代。

微信扫一扫,分享到朋友圈

如何用 StreamAPI 处理 BigDecimal 的 add 操作

苏宁版拼多多上线 ,「易值买」App杀进618战场

上一篇

影分身之术-Java动态代理

下一篇

你也可能喜欢

如何用 StreamAPI 处理 BigDecimal 的 add 操作

长按储存图像,分享给朋友