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

jdk 流合并

看来可能是一种新的方法,将可在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添加到可合并其他两个Collector的结果的Collectors类中”,然后明确指出“应添加一个API方法(名称尚待讨论)”。 如果您曾经想在公共JDK API中命名方法,那么这可能是您的机会!

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

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

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

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

jdk 流合并

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

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

相关文章

MySQL配置变量log-bin,重启数据库服务失败

在配置文件 /etc/my.cnf 添加变量 log-bin: log-bin/var/lib/mysql/mybinlog/mysql-bin重启数据库服务报错: [roothtlwk0001host lib]# systemctl start mysqld.service Job for mysqld.service failed because the control process exited with error…

javafx 调用java_Java,JavaFX的流畅设计风格滑块

javafx 调用javaJMetro的Java,JavaFX主题版本刚刚提高到4.2版。 此版本为Slider控件带来了新样式。 除此之外,您现在还可以看到一个弹出窗口,向您显示滑块的当前值。 新滑块样式 以下是旧的JMetro Slider样式: 滑块OLD JMetro灯…

WebService入门介绍

参考文献: https://blog.csdn.net/cs_hnu_scw/article/details/80181762 创建服务器webService package com.william.TestWebService; import javax.jws.WebService; import javax.xml.ws.Endpoint;WebService public class MyFirstWebService {/*** 定义webservi…

手游建筑美术资源_建筑商和机械手

手游建筑美术资源下面是命名的OOP方法,这我想在我的代码遵循一个简单的原则:这是一个动词 ,如果它操纵 ,这是一个名词 ,如果它的基础之上 。 而已。 两者之间什么都没有。 诸如saveFile()或getTitle()不适合使用&#…

MySQL二进制日志文件的用法_数据恢复

文章目录开启二进制日志功能关闭/打开二进制日志记录刷新二进制日志文件查看二进制日志文件的存储位置利用二进制日志文件恢复数据的本质二进制日志提取/导出到脚本文件中查看当前二进制日志的最后一个位置查看二进制日志文件的内容执行 SQL 脚本文件以恢复数据二进制日志分析指…

启动weblogic需要账号密码问题

<Server is Running in Production Mode and Native Library(terminalio) to read the password securely from commandline is not found.> 解决方法 在weblogic路径下创建 \weblogic11\user_projects\domains\base_domain\servers\AdminServer\security 目录下创建bo…

mysqlbinlog: [ERROR] unknown variable ‘default-character-set=utf8mb4‘

错误提示&#xff1a; [roothtlwk0001host ~]# mysqlbinlog /var/lib/mysql/mybinlog/mysql-bin.000004 mysqlbinlog: [ERROR] unknown variable default-character-setutf8mb4原因&#xff1a; mysqlbinlog 这个工具无法识别 binlog 中的配置中的 default-character-setutf8m…

Mybatis一对一结果映射

目录结构 创建数据库相应的表 一个账户对应一个用户 accout CREATE TABLE account (aid int(11) NOT NULL AUTO_INCREMENT,accountname varchar(20) DEFAULT NULL,money float(10,2) DEFAULT NULL,userId int(11) DEFAULT NULL,PRIMARY KEY (aid),KEY userId (userId),CONSTR…

lambda表达式java_Lambda表达式Java教程

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

MySQL命令之mysqlhotcopy -- 热备份

文章目录命令介绍命令格式安装 mysqlhotcopy常用选项命令介绍 mysqlhotcopy 只是简单的缓存写入和文件复制的过程&#xff0c;其使用 LOCK TABLES、FLUSH TABLES 和 CP 来进行快速备份,占用资源和备份速度比 mysqldump 快很多很多。特别适合大的数据库&#xff0c;但需要注意的…

trackby_使用trackBy启动流程

trackby仍然沿用我的Corda Services趋势&#xff0c;我还有其他一些技巧可帮助您的CorDapp顺利工作。 这次&#xff0c;我们将重点关注使用trackBy从服务内部启动流以及如果您不小心可能会引发的离散问题。 这应该是一个相对简短的职位&#xff0c;因为我可以依靠以前的职位&a…

SQL查询语句的排序

order by column1 asc, column2 desc -- 按column1升序排序&#xff0c;若column1值相同&#xff0c;则按column1降序排序asc&#xff0c;ascend 的缩写&#xff0c;表示正序&#xff0c;即升序&#xff0c;从小到大&#xff0c;可以省略&#xff0c;默认的 desc&#xff0c;de…

SpringBoot创建项目入门案例

目录结构 一、创建SpringBoot项目 1.创建骨架名称 2.给项目命名 3.配置pom.xml文件 4.MySql的驱动包 5.自动生成的pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xs…

apache spark_Apache Spark Job的剖析

apache sparkApache Spark是通用的大规模数据处理框架。 了解spark如何执行作业对于获取大部分作业非常重要。 关于Spark评估范式的简要介绍&#xff1a;Spark使用的是惰性评估范式&#xff0c;在该范式中&#xff0c;Spark应用程序在驱动程序调用“ Action”之前不会执行任何…

MySQL常用权限的解释

文章目录全局管理权限数据库/数据表/数据列权限特别的权限全局管理权限 FILE: 在MySQL服务器上读写文件。 PROCESS: 显示或杀死属于其它用户的服务线程。 RELOAD: 重载访问控制表&#xff0c;刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限 ALTER: 修改已…

No identifier specified for entity没有为实体指定标识符

异常 ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘userController’: Injection of resour…

aws jenkins_Jenkins在AWS上(第1部分)

aws jenkins这是我对PEAT UK播客的逐字记录&#xff1a; 你好&#xff0c;再一次到另一个热点。 我叫Peter Pilgrim。 我曾经是DevOps专家&#xff0c;欢迎观看另一集。 这是11 Jenkins n AWS的第一部分&#xff0c;我是一名平台工程师&#xff0c;并且是Java Champion。 在…

SELECT ... FOR UPDATE_手动加行级排他锁_行级写锁_行级独占锁

文章目录介绍加锁情况分析明确指定主键&#xff0c;并且数据真实存在&#xff0c;锁定行明确指定主键&#xff0c;但数据不存在&#xff0c;不加锁主键不明确&#xff0c;锁定整个表无主键&#xff0c;锁定整个表应用场景介绍 1.FOR UPDATE 加的锁是一种行级排他锁&#xff0c…

广义表

广义表(广义表也称为列表&#xff0c;是线性表的一种推广&#xff0c;也是数据元素的有序序列) 一、基础 1.如何设定链表结点?广义表中的数据元素可能为单元素(原子)或子表&#xff0c;由此需要两种结点:一种是表结点&#xff0c;用以表示广义表;一种是单元素结点&#xff0c;…

数据库各种锁详解

文章目录排他锁共享锁更新锁意向锁锁的粒度数据库自动加锁手动加锁各种锁之间的兼容问题排他锁 Exclusive Locks&#xff0c;英译&#xff1a;排他锁&#xff0c;简称 X 锁&#xff0c;又称为写锁或独占锁。排他锁分为表级排他锁和行级排他锁。 如果事务 T1 对数据行对象 A 加…