这篇文章主要描述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));
}
  1. 使用map将实体转化成cartow类型
  2. 使用teeing方法
  3. 第一个collector汇总行价格,这里使用了一个简单的reducing函数来汇总
    1. 起始元素
    2. 从cartrow中提取price出来,
    3. 将两个值相加得到结果
  4. 第二个collector汇总cartrow成一个列表
  5. 最后的参数创建一个新的对象用来保存第一个collector和第二个collector的结果
    总结,teeing的实现方式:
  6. 由两个collector组成,collector可以使用多种形式的steam方法,如累加组合整理等参见方法
  7. 建凉饿collector并列传入teeing
  8. 最后一个参数用来创建一个新的collector来传递值

希望这篇文章可以让你认识teeing的用法,不断的学习新事物

Teeing,java原生api的隐藏宝藏相关推荐

  1. Java原生API操作XML

    使用Java操作XML的开源框架比较多,如著名的Dom4J.JDOM等,但个人认为不管你用那个框架都要对JDK原生的API有所了解才能更得心应手的应用.本篇就来简单了解下原生的XML API. JAV ...

  2. java jax_JAX Mag的新问题:Java 13 – JDK的隐藏宝藏

    java jax 让我们一起庆祝Java –三次! 又到了:新的Java版本就在这里! Java 13在Java 12发行六个月后按计划启动,并且再次具有一些有趣的功能. 在本期< Jax杂志& ...

  3. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

  4. Eclipse系列的隐藏宝藏– 2019年版

    Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent Calendar中发布 ...

  5. Eclipse系列的隐藏宝藏-2019年版

    Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent Calendar中发布 ...

  6. 第十六讲 java进阶-API

    第十六讲 java进阶-重写equals方法的深度解读 1 接口的补充 接口为什么不能new对象?有没有必要new对象?或者是说如果能new对象,new出来的是什么东西?有什么内容,是否符合对象的特征 ...

  7. eclipse使用教程_Eclipse系列的隐藏宝藏– 2019年版

    eclipse使用教程 Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent ...

  8. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  9. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

最新文章

  1. IP 公司与GPU IP
  2. Python爬虫实战,requests模块,Python实现抓取王者荣耀全套皮肤
  3. springmvc 将大写转小写_Excel – 快速设置大小写中文数字顺序编号,拖动自动增序...
  4. python log日志_python脚本攻略之log日志
  5. 炸掉卡西欧991CNX
  6. linux下I2C驱动架构全面分析
  7. 使用WindowsAPI创建txt文件
  8. 安装Sql Server 2005 失败一例
  9. 想要学习C++,到底能从事哪种行业?
  10. 代码行数统计工具(SourceCounter附下载链接)
  11. 基于Scrapy的IP代理池搭建
  12. EEG多元模式分析预测慈善捐赠行为
  13. 在Matlab中构建最大带权生成树
  14. 被遗忘的设计模式——空对象模式(转载)
  15. 将ping结果显示在html中,Ping使用方法大全
  16. 国产操作系统银河麒麟V10桌面系统文件共享配置
  17. 大数据周周看:前英特尔高管加入谷歌云部门,网易与威马汽车合作打造“互联网+”时代智能汽车
  18. java 电梯类图,电梯控制系统(用UML图理解)
  19. ios 按钮下面加下划线_iOS开发UILabel和UIButton添加下划线
  20. 各类后门整理!【白帽黑客必备生存技能】

热门文章

  1. 我忘了你是谁-非主流留言
  2. ue4 开发动作游戏_《隐龙传》:首款UE4打造的国产动作游戏
  3. 转:80后的80条幽默有哲理的语录
  4. 跨国企业在中国 | 加特可苏州工厂开业生产尖端变速器;格拉默与一汽子公司办合资企业...
  5. 推荐一个linux游戏-nexuiz,ubuntu系统
  6. Node.js第一个应用HelloWorld
  7. 【附源码】计算机毕业设计java休闲网络宾馆管理设计与实现
  8. 页面验证码的显示与点击刷新问题
  9. 【vue-el-table】删除功能-处理页码边界问题
  10. oracle+启动文件在哪里设置,oracle 挑选所要打开的网络配置文件的所在目录