点击上方蓝色“程序猿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 操作相关推荐

  1. Git 取消上一次commit操作,但保留add操作

    为什么80%的码农都做不了架构师?>>>    场景重现 删除了代码中的一些空白行,习惯性添加&提交 git add .git commit -m "溢出一些空白行 ...

  2. java: BigDecimal 调用add后,求和结果没有变化

    BigDecimal使用add时,原数没有不变. BigDecimal 的 add方法是,调用者不变. 因此,对结果进行接收.改为如下 package com.baobaotao;import jav ...

  3. 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作

    在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 foreach循环 foreach循环(Foreach loop)是计算机编程 ...

  4. 不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁

    不要在foreach循环里进行元素的remove/add操作.remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁

  5. java不进入for_为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作?...

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于在 foreach 循环里进行元素的 remove/add 操作的规约,具体内容如下: 错误演示 我们首先在 IDEA 中编写一个在 f ...

  6. 【Java开发规范】禁止在 foreach 循环里进行元素的 remove/add 操作

    在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. foreach循环 Foreach循环(Foreach loop)是计算机编程语言 ...

  7. 不要在 foreach 循环里进行元素的 remove / add 操作

    在foreach 循环里面,不能用remove方法,因为当list里面的最后一个元素被remove时候,会报错. 摘自<阿里巴巴Java开发手册> [强制]不要在 foreach 循环里进 ...

  8. git 撤销 add .操作

    不小心把不该同步的文件add进去了 撤销add操作 git reset HEAD . 就可以把工作区Unstaged 了

  9. 怎么进入命令行操作mysql数据库_MySQL数据库之如何用命令行进入mysql具体操作步骤...

    本文主要向大家介绍了MySQL数据库之如何用命令行进入mysql具体操作步骤 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 如何用命令行进入mysql?最近无意在论坛上看到有朋 ...

最新文章

  1. 当人类与「熵」对抗时,意识出现了!那AI呢?
  2. mac svn的替代品CornerStone
  3. python实现文件下载-Python实现HTTP协议下的文件下载方法总结
  4. css行高line-height的一些深入理解及应用
  5. 实验一 Part 1 开发环境的配置运行
  6. [原]2011年度生活三层总结
  7. rainmeter皮肤_关于雨滴桌面(rainmeter)中无界大神的仿WMP外星人播放器修改方案...
  8. (转)MTK_面试的几个主要问题 必看
  9. jenkins简介及docker部署
  10. 【转】移动前端工作的那些事---UE/UI架构原型搭建和前端设计之UE架构原型搭建...
  11. 解包操作符 python_用解包操作符 * 解包列表
  12. cnzz.php,CNZZ网站流量统计原理简析
  13. oracle报1653解决办法,ORA-1653的问题
  14. 最好用的论文数据搜索网站,搜索容易让写论文变轻松!
  15. 图像处理入门系列之对比度增强
  16. 约翰霍普金斯大学计算机专业,约翰霍普金斯大学计算机专业排名第几?
  17. 39《黑客与画家 : 硅谷创业之父Paul Graham文集》 -豆瓣评分8.8
  18. werfault进程使用CPU率高
  19. php实现通讯录按字母分组,通讯录首字母检索功能实现
  20. 戴望舒 《雨巷》

热门文章

  1. python3 多进程 multiprocessing 报错 AttributeError: ‘ForkAwareLocal‘ object has no attribute ‘connection‘
  2. python3 asyncio 协程模块
  3. qemu虚拟机与外部网络的通信
  4. 原始套接字SOCK_RAW
  5. 深入了解WM_SIZE
  6. VC中CListCtrl中的LVCOLUMN和LVITEM详细介绍
  7. 在汇编程序中调用C语言的库函数,h转inc
  8. Java内存管理之软引用(Soft Reference)
  9. Java学习之switch语句
  10. linux查找最近访问的文件,教您在Linux系统中查找最近修改的文件/文件夹