前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用StreamAPI处理BigDecimal的add

如何用StreamAPI处理BigDecimal的add

作者头像
用户1516716
发布2020-06-17 19:53:02
1K0
发布2020-06-17 19:53:02
举报
文章被收录于专栏:A周立SpringCloud

1. 引言

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

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

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

2. 如何用流求和

Stream API 提供数字流 numbers Stream,包括 IntStream、DoubleStream、和LongStream我们通过创建一个数字流来来搞清楚它们是如何工作的。然后,我们用 [IntStream#sum] 计算它的总数:

代码语言:javascript
复制
IntStream intNumbers = IntStream.range(0, 3);
assertEquals(3, intNumbers.sum());

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
Stream<Integer> intNumbers = Stream.of(5, 1, 100);
int result = intNumbers.reduce(0, Integer::sum);
assertEquals(106, result);

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

代码语言:javascript
复制
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作为替代。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT牧场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言
  • 2. 如何用流求和
  • 3. 使用Reduce添加BigDecimal数字
  • 4. Conclusion
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档