JDK 12,合并的收集器和命名的挑战

看来可能是一种新的方法,将可在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】国家开放大学2021春2238个案工作题目

试卷代号:2238 2021年春季学期期末统一考试 个案工作 试题 2021年7月 一、单选题(下列选项中只有一个是正确的,将正确的答案序号填写在括号内。共10题,每题2分,共20分) 1.下列关于个案工作的特点下列说法正…

【渝粤题库】国家开放大学2021春2321物流学概论题目

试卷代号:2321 2021年春季学期期末统一考试 物流学概论 试题 2021年7月 一、单项选择题(每小题2分,共20分,将正确答案选项的字母填入题目中的括号内) 1.物流观念的启蒙和产生都是在( )完成的。 A.美国 B.英国 C.日本 D…

【渝粤题库】国家开放大学2021春2409中国古代文学(B)(1)题目

试卷代号:2409 2021年春季学期期末统一考试 中国古代文学(B)(1) 试题(开卷) 2021年7月 一、填空题(每空1分,共20分) 1.如果从音乐上进行分类,《诗经》由风、、三部分组成。 2.先秦时期历史散文的…

【渝粤题库】国家开放大学2021春2476旅游学概论题目

试卷代号:2476 2021年春季学期期末统一考试 旅游学概论 试题 2021年7月 一、单项选择(在每小题的4个选项中选出一个正确的,将其序号填入题后括号内。每小题2分,共20分) 1.人们利用假期进行的以休息、休养和消遣为目的的…

Web应用程序安全性:战斗自己或寻找理智的边缘

Web应用程序应有多安全? 好吧,对于我们许多Web开发人员来说,这个问题没有多大意义。 “应用程序必须尽可能地安全。 它越安全,就越好。” 但这不是一个确定的答案。 形成项目的安全策略无济于事。 此外,仅遵循该单一指…

【渝粤题库】国家开放大学2021春2528监督学题目

试卷代号:2528 2021年春季学期期末统一考试 监督学试题 2021年7月 一、多项选择题(每小题3分,共15分) 1.监督的基本原则有( )。 A.依法监督原则 B.公开监督原则 C.公正监督原则 D.全面监督原则 2.以下属于党内监督主体的有( )。 A…

边缘计算、雾计算、云计算区别几何?

云计算是理解其中区别的关键! 1. 云计算 一种利用互联网实现随时随地、按需、便捷地使用共享计算设施、存储设备、应用程序等资源的计算模式。 云计算系统由云平台、云存储、云终端、云安全四个基本部分组成。 云平台从用户的角度可分为公有云、私有云、混合云等。…

【渝粤题库】国家开放大学2021春2625调剂学题目

试卷代号:2625 2021年春季学期期末统一考试 调剂学 试题 2021年7月 一、单项选择题(每题2分,共44分) 1.医院药房和社会药房需要共同遵守的法律法规是( )。 A.《中华人民共和国药品管理法》 B.《处方管理办法》 C.《处方药与非处方…

【渝粤题库】国家开放大学2021春2718动物生理基础题目

试卷代号:2718 2021年春季学期期末统一考试 动物生理基础 试题 2021年7月 一、单项选择题(每题3分,共15分) 1.机体的内环境主要指( )。 A.体液 B.血液 C.细胞内液 D.细胞外液 2.血浆渗透压相当于( )。 A.0.9%葡萄糖溶液的渗透压 B…

【渝粤题库】国家开放大学2021春2764饲养与饲料题目

试卷代号:2764 2021年春季学期期末统一考试 饲养与饲料 试题 2021年7月 一、单项选择题(每题3分,共30分) 1.下列选项中,对于动物性蛋白质饲料的营养特点描述不正确的是( )。 A.蛋白质、赖氨酸含量高 B.灰分含量高 C.维…

马尔可夫Markov决策过程 MDP、马尔可夫奖励过程MRP

引言 在概率论及统计学中,马尔可夫过程(英语:Markov process)是一个具备了马尔可夫性质的随机过程,因为俄国数学家安德雷马尔可夫得名。马尔可夫过程是不具备记忆特质的(memorylessness)。换言…

【渝粤题库】国家开放大学2021春3894理工英语1题目

试卷代号:3894 2021年春季学期期末统一考试 理工英语1 试题 2021年7月 注 意 事 项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏 内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带 出考场。监考人收…

rxjava 被观察者_RxJava:从未来到可观察

rxjava 被观察者大约4年前,我第一次在Matthew Podwysocki的博客上遇到了Reactive Extensions ,但是直到我几周前看到Matthew在Code Mesh上发表演讲后,我才对它有所了解。 最近它似乎越来越流行,我注意到Netflix编写了一个Java版本…

【渝粤题库】国家开放大学2021春3962金融营销基础题目

试卷代号:3962 2021年春季学期期末统一考试 金融营销基础 试题(开卷) 2021年7月 一、单项选择题(在以下各题的备选答案中只有一个是正确的,请将正确答案的字母标号填在括号内,多选、不选、错选均不得分。每…

母函数(Generating function)、矩母函数(Moment Generating Function)

1. 简介 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。 母函数可分为很多种,包括普通母函数、指数母函…

Lambda表达式Java教程

在本文中,我们提供了全面的Lambda Expressions Java教程。 1. Lambda Expressions Java教程–简介 Lambda表达式被认为是Java 8中引入的最好的功能之一。Lambda表达式被认为是Java进入函数式编程世界的第一步 。 可以将其视为无需类即可创建的函数。 它也可以像参数…

国家开放大学2021春1118机电一体化系统设计基础题目

教育 教育 试卷代号: 1118 2021年春季学期期末统一考试 机电一体化系统设计基础 试题 2021年7月 一、单选题(每小题3分.共24分) 1.以下不属于机电一体化系统主要功能的是( )。 A.控制功能 B.检测功能 C.计算功能 D.动力功能 2.为了提高机电…

随机过程

第一部分:为什么要研究随机过程? 人类认识世界的历史,就是一认识和描绘各种运动的历史,从宏观的天体运动到分子的运动,到人心理的运动-我们通称为变化,就是一个东西随时间的改变。 人们最成功的描绘运动的…