看来可能是一种新的方法,将可在java.util.streams.Collectors类JDK 12即会,根据新方法的提出了基于Javadoc的文档,“返回一个收藏家是将输入的元素两个规定的收藏家并将其结果与指定的合并功能合并。” 目前 ,此新Collectors方法的建议名称为pairing ,但该新方法的名称已成为重要讨论的来源。

此方法的名称引起了OpenJDK core-libs-dev邮件列表的广泛讨论。 尽管起初想将其标记为自行车脱落的示例(或帕金森氏平凡定律 )很容易,但是我的经验是,正确的命名比最初看起来更重要。 我已经看到很多情况下,特定实现的逻辑都没有错,但是随之而来的问题是由于沟通不畅或与命名较差的代码构造相关的错误假设而导致的与该实现的使用有关。 对于JDK中的主要API,毕竟如此认真地考虑此方法参数的名称并不奇怪。

讨论始于Peter Levart的帖子“ BiCollector ”(6月17日),他在开始时提出了一个问题:“您是否曾经想使用两个Collector将同一Stream收集到两个不同的目标中?” Levart提供了一个实现此类“ BiCollector ”的示例,并询问这是否是可以添加到JDK中的东西类型。 毫不奇怪,事实证明这是其他人所期望的,并且提到了一些替代的现有实现( Kirk Pepperdine和Tagir Valeev的streamex 实现 )。

在讨论了“ BiCollector”的多种实现方式之后, Tagir Valeev创建了一个OpenJDK“ 我自己的实现方式的初步Webrev ”, 并将其发布以进行审核 (6月15日)。 在那篇文章中 ,Valeev特别指出他为该方法编了“ pairing”(配对)的名称,并补充说:“由于我不是英语母语人士,所以我无法判断它是否是最佳选择,因此欢迎更好的主意。” 那就是“ 打开了水闸 !”

尽管围绕拟议的“ BiCollector”的其他实现细节进行了一些有趣且有意义的讨论(现在在拟议的代码中为“ Collectors.pairing(…)”),但该方法的命名贡献最大。在6月21日的帖子中 ,Valeev总结了提议的名称,并附有关于每个建议的评论,我在此处复制了该列表(但没有深刻的评论):

  • 平分
  • 开球或开球
  • 双工
  • 分叉 (或分叉?)
  • 复制者
  • 复制
  • 扇出或扇出
  • 分布
  • 窃听
  • 分裂
  • 解压缩
  • biMapping
  • 二者皆是
  • collectionToBothAndThen
  • 收集双方
  • collectionTo
  • 双向收集
  • 扩大
  • 分叉

对于那些对上述提议的名称“赞成”和“反对”的论点感兴趣的人,我建议查看Valeev的原始帖子 。 上面链接的大多数带有名称建议的帖子都为其首选名称提供了论据,并且对OpenJDK贡献者认为方法名称中的哪些方面可能有助于或阻碍对该方法的理解有一些有趣的见解。

在为该方法命名后,讨论就此添加到Collectors API上了一段时间,直到Valeev今天发布了“ ping消息 ”,并链接到最新的webrev以供审核(将@since 11更改为@since 12 )。 响应此“ ping”消息, 收到有关所建议方法的最后一个参数名称 (当前称为“ finisher ”)的反馈 ,这再次提醒了命名对于我们许多人的重要性。

在core-libs-dev邮件列表上有关此主题的其他文章提醒我们,要将这种新方法添加到Collectors 公共API中 ,仍然需要做一些事情,包括发起人自愿检查和赞助更改集 。以及对CSR ( 兼容性和规范审查 )的需求和“ 几个完全了解Streams设计的审查者 ”。

Brian Goetz在此线程上的帖子总结了为什么命名此提议的方法如此困难:

在这里命名的基本挑战是,该收集器要做两件事(或可能三件事):将流复制为两个相同的流(“ tee”),将每个元素发送给两个收集器(“ collecting”),然后合并结果(“精加工”)。 因此,所有的单字名称(配对,发球,解压缩,biMapping)仅强调操作的一半,而准确地捕获整个工作流程的名称(teeingAndCollectingAndThen)则很笨拙。

戈茨(Goetz )的同一篇文章也反对该方法名称的“合并”(或其派生词),因为“沿'合并'的名称可能会错误地给出合并是按元素进行的想法,而不是复制流,进行收集和合并”结果。”

我发现一些建议的方法名称是合理的,但是我相信(希望)有一些是出于幽默的尝试。

JDK-8205461 [“合并其他两个收集器的结果的创建收集器”]是描述此问题的“增强”“错误”。 目前,它的描述开始于“将新的Collector添加到Collectors类中,以合并其他两个Collector的结果”,然后明确指出“应添加一个API方法(名称尚待讨论)”。 如果您曾经想在公共JDK API中命名方法,那么这可能是您的机会!

我已使用此博客文章来尝试完成两件事:

  1. 从JDK 12开始,使人们意识到这种方法很可能在公共API中可用
  2. 举例说明命名为何如此重要以及为什么命名可能与技术实施一样困难
    • 对于任何人来说,正确的命名都可能会很困难,即使我们中的母语是英语的人也是如此!

尽管实现中的一个或多个名称可能会更改,但是从逻辑上讲 , 当前提出的实现很可能与最终将与JDK-8205461结合交付的实现非常接近。

翻译自: https://www.javacodegeeks.com/2018/08/jdk-12-merging-collectors.html

JDK 12,合并的收集器和命名的挑战相关推荐

  1. jdk 流合并_JDK 12,合并的收集器和命名的挑战

    jdk 流合并 看来可能是一种新的方法,将可在java.util.streams.Collectors类JDK 12即会,根据新方法的提出了基于Javadoc的文档,"返回一个收藏家是将输入 ...

  2. 研究了 2 天,终于知道 JDK 8 默认 GC 收集器了!

    JDK 8 到底默认用的是哪款 GC 收集器? 为啥是 JDK8?不是 9 也不是 10?因为 JDK8 还是市场占有率最高的,所以针对这个版本我做了深入的探索. <深入理解 Java 虚拟机& ...

  3. 直通BAT必考题系列:深入剖析JVM之G1收集器、及回收流程、与推荐用例

    金三银四马上到了,即将进入面试的高峰期.在BAT面试中,JVM基本都是必考的系列.你至少需要掌握JVM内存模型与JVM参数详细配置,JVM的4种垃圾回收算法.垃圾回收机制与总结,以及今天重点谈到的JV ...

  4. JVM--垃圾收集器与内存分配策略

    1.概述 垃圾回收器的历史比Java久远,诞生于Lisp(第一门开始使用内存动态分配和垃圾收集技术的语言). 2.对象已死? 1.引用计数法 概述:在对象中添加一个引用计数器,每当有一个地方引用它时, ...

  5. 流集数据收集器最新消息

    最新消息 3.10.0 中的新增功能 数据收集器版本 3.10.0 包括以下新功能和增强功能: 起源 此版本包括以下新源: Groovy 脚本 - 运行 Groovy 脚本以创建数据收集器记录. 脚本 ...

  6. JVM---垃圾收集器(万字详解)

    垃圾收集器万字详解 垃圾回收器 垃圾收集器万字详解 前言 垃圾收集器说明与发展史 垃圾收集器简要说明 垃圾收集器发展史 垃圾收集器的分类 衡量垃圾收集器性能的指标 不同的垃圾收集器概述 7款经典的垃圾 ...

  7. 矩阵累积相乘 java_累积:轻松自定义Java收集器

    矩阵累积相乘 java Accumulative是针对Collector<T, A, R>的中间累积类型A提出的接口Collector<T, A, R>以使定义自定义Java ...

  8. 累积:轻松自定义Java收集器

    Accumulative是针对Collector<T, A, R>的中间累积类型A提出的接口Collector<T, A, R>以使定义自定义Java Collector更加容 ...

  9. ZGC收集器(学习笔记)

    ZGC收集器 一款在 JDK 11中新加入的具有实验性质的低延迟垃圾收集器 ZGC的目标是希望在尽可能对吞吐量影响不太大的前提下,实现在任意堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的低延 ...

最新文章

  1. storm从入门到放弃(一),storm介绍
  2. css文字背景虚化,通过实现背景模糊、文字颜色流光渐变、边框扩展等效果学习transition、transform、@keyframes等属性及伪元素的使用...
  3. SVN创建不了资源库位置 解决方案
  4. 超简单利用xposed框架破解钉钉打卡
  5. sqlalchemy通过已经存在的表生成model的方法
  6. 微软drive服务器,OneDrive:微软云存储服务
  7. correspondence analysis of drug and genotype(spss)
  8. 微信小程序表单必填项设置
  9. [源码和报告分享]基于C++实现的运动会统分系统
  10. 小甲鱼python课后题共多少讲_小甲鱼python视频第七讲(课后习题)
  11. 【报告分享】京东大数据研究院:2020线上农产品消费趋势报告(附下载)
  12. 弘辽科技:商家直通车操作
  13. css来回摆动,css3 animation(左右摆动) (放大缩小)
  14. 热感觉、热舒适、热满意度、热需求与热偏好
  15. html5实习体会,html5实习心得体会.docx
  16. 有效解决package ‘xxxx‘ is not in GOROOT
  17. Balance安装及用法小结
  18. 网络安全如何进行培训才有效
  19. 移动端background 照片不铺满的处理
  20. Exadata健康检查与评估

热门文章

  1. 纪中A组模拟赛总结(2021.7.13)
  2. 纪中在家培训总结(2020.2.1~2020.2.24)
  3. 北方大学 ACM 多校训练赛 第十五场 买花
  4. Spark入门(七)Spark SQL thriftserver/beeline启动方式
  5. 通俗易懂,常用线程池执行的-流程图
  6. 分享10道常考Java面试题及答案
  7. MongoDB查询实现 笛卡尔积,Union All 和Union 功能
  8. 超详细的 Redis Cluster 官方集群搭建指南
  9. Oracle入门(十四.2)之PL / SQL的好处
  10. JavaFX之TableView的TableRow