我是靠谱客的博主 腼腆保温杯,最近开发中收集的这篇文章主要介绍如何用 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());

我们可以从Doubles的列表开始执行类似的操作。通过使用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作为替代。

往期推荐

从0到1:构建强大且易用的规则引擎

实战派:一次kafka卡顿事故排查过程!

Spring Boot 2.3.0 新特性:优雅停机

如何将注册中心从 Consul 平滑的迁移到 Nacos ?

告诉你你也学不会!中台灵感 SuperCell 的管理之道!

面试:HashMap 夺命二十一问!

欢迎加入我的知识星球,聊聊技术、说说职场、扯扯社会。

头发很多的中年程序员DD在这里期待你的到来!

最近更新

【技术圈】关于Consul作为注册中心的四种形态演变

【技术圈】配置中心除了存储应用配置之外,适合做其他配置的存储吗?

【社会人】老实工作没有其他收入,为什么还要补缴个税?

【社会人】除了年终汇算清缴之外,今年的另一件大事:LPR

【聊职场】过来人说说银行科技怎么样?值得进去吗?

加入方式:长按下方二维码噢

我的星球是否适合你?

点击阅读原文看看我们都在聊啥

最后

以上就是腼腆保温杯为你收集整理的如何用 StreamAPI 处理 BigDecimal 的 add 操作的全部内容,希望文章能够帮你解决如何用 StreamAPI 处理 BigDecimal 的 add 操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部