Teeing,java原生api的隐藏宝藏
这篇文章主要描述Collector.teeing()方法到底是什么东西
javaDocs
返回一个由两个后续的stream组成的一个新的集合,返回的新的集合中的每个元素都会经由两个处理器处理过,然后使用指定的合并函数合并到最终结果中
最终的结果集都会执行以下操作:
- 供应商(supplier):创建一个结果容器,这个结果容器包含了通过调用每个collector的供应商获得的容器
- 累加器(accumulator): 使用其结果容器和输入元素调用每个收集器的累加器
- 组合器(combiner):使用两个结果容器调用每个收集器的组合器
- 整理器(finisher):使用其结果容器调用每个收集器的整理器,然后调用提供的合并并返回其结果
解析
我们可以使用两个简单的collector实现来替代我们常用的collectort的写法,如以下代码例子,用来汇总每一行的价格以及购物车的总价格。
public PriceAndRows getPriceAndRows(Cart cart) {return cart.getProducts().entrySet().stream().map(CartRow::new) // 1.collect(Collectors.teeing( // 2Collectors.reducing( // 3BigDecimal.ZERO, // 3.1CartRow::getRowPrice, // 3.2BigDecimal::add), // 3.3Collectors.toList(), // 4PriceAndRows::new // 5));
}
- 使用map将实体转化成cartow类型
- 使用teeing方法
- 第一个collector汇总行价格,这里使用了一个简单的reducing函数来汇总
- 起始元素
- 从cartrow中提取price出来,
- 将两个值相加得到结果
- 第二个collector汇总cartrow成一个列表
- 最后的参数创建一个新的对象用来保存第一个collector和第二个collector的结果
总结,teeing的实现方式: - 由两个collector组成,collector可以使用多种形式的steam方法,如累加组合整理等参见方法
- 建凉饿collector并列传入teeing
- 最后一个参数用来创建一个新的collector来传递值
希望这篇文章可以让你认识teeing的用法,不断的学习新事物
Teeing,java原生api的隐藏宝藏相关推荐
- Java原生API操作XML
使用Java操作XML的开源框架比较多,如著名的Dom4J.JDOM等,但个人认为不管你用那个框架都要对JDK原生的API有所了解才能更得心应手的应用.本篇就来简单了解下原生的XML API. JAV ...
- java jax_JAX Mag的新问题:Java 13 – JDK的隐藏宝藏
java jax 让我们一起庆祝Java –三次! 又到了:新的Java版本就在这里! Java 13在Java 12发行六个月后按计划启动,并且再次具有一些有趣的功能. 在本期< Jax杂志& ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )
文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...
- Eclipse系列的隐藏宝藏– 2019年版
Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent Calendar中发布 ...
- Eclipse系列的隐藏宝藏-2019年版
Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent Calendar中发布 ...
- 第十六讲 java进阶-API
第十六讲 java进阶-重写equals方法的深度解读 1 接口的补充 接口为什么不能new对象?有没有必要new对象?或者是说如果能new对象,new出来的是什么东西?有什么内容,是否符合对象的特征 ...
- eclipse使用教程_Eclipse系列的隐藏宝藏– 2019年版
eclipse使用教程 Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )
文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...
最新文章
- IP 公司与GPU IP
- Python爬虫实战,requests模块,Python实现抓取王者荣耀全套皮肤
- springmvc 将大写转小写_Excel – 快速设置大小写中文数字顺序编号,拖动自动增序...
- python log日志_python脚本攻略之log日志
- 炸掉卡西欧991CNX
- linux下I2C驱动架构全面分析
- 使用WindowsAPI创建txt文件
- 安装Sql Server 2005 失败一例
- 想要学习C++,到底能从事哪种行业?
- 代码行数统计工具(SourceCounter附下载链接)
- 基于Scrapy的IP代理池搭建
- EEG多元模式分析预测慈善捐赠行为
- 在Matlab中构建最大带权生成树
- 被遗忘的设计模式——空对象模式(转载)
- 将ping结果显示在html中,Ping使用方法大全
- 国产操作系统银河麒麟V10桌面系统文件共享配置
- 大数据周周看:前英特尔高管加入谷歌云部门,网易与威马汽车合作打造“互联网+”时代智能汽车
- java 电梯类图,电梯控制系统(用UML图理解)
- ios 按钮下面加下划线_iOS开发UILabel和UIButton添加下划线
- 各类后门整理!【白帽黑客必备生存技能】
热门文章
- 我忘了你是谁-非主流留言
- ue4 开发动作游戏_《隐龙传》:首款UE4打造的国产动作游戏
- 转:80后的80条幽默有哲理的语录
- 跨国企业在中国 | 加特可苏州工厂开业生产尖端变速器;格拉默与一汽子公司办合资企业...
- 推荐一个linux游戏-nexuiz,ubuntu系统
- Node.js第一个应用HelloWorld
- 【附源码】计算机毕业设计java休闲网络宾馆管理设计与实现
- 页面验证码的显示与点击刷新问题
- 【vue-el-table】删除功能-处理页码边界问题
- oracle+启动文件在哪里设置,oracle 挑选所要打开的网络配置文件的所在目录