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 流合并

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

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

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

  2. jdk switch 枚举_JDK 12开关表达式遇到意外的枚举值

    jdk switch 枚举 正如我在" 玩JDK 12的Switch表达式 "一文中所写的那样, JDK 12 Early Access Build使JEP 325 [" ...

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

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

  4. JVM总结(四)GC收集器以及JDK7,JDK8中JVM内存变化

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. GC收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存 ...

  5. Java 8 - 收集器Collectors_分组groupingBy

    文章目录 Pre 多级分组 按子组收集数据 查找每个子组中热量最高的 Dish 图解工作过程 与 groupingBy联合使用的其他收集器的例子 附 Pre 来看个小例子: 把菜单中的菜按照类型进行分 ...

  6. LWN: 5.12 合并窗口,第一部分!

    关注了就能看到更多这么棒的文章哦- 5.12 Merge window, part 1 By Jonathan Corbet February 22, 2021 DeepL assisted tran ...

  7. java 8流自定义收集器_Java 8编写自定义收集器简介

    java 8流自定义收集器 Java 8引入了收集器的概念. 大多数时候,我们几乎不使用Collectors类中的工厂方法,例如collect(toList()) , toSet()或其他更有趣的方法 ...

  8. 两个音轨合并_两个双音轨mkv视频合并保持原双音轨不变 MKV怎么合并视频,合并之后仍保留MKV的双音轨...

    在写文之前先说明下,笔者在双音轨处理方面接触不久,也只算是半吊子,离砖家级别还有些距离滴,若有不足的地方,欢迎大家补充哈.今天突然想到mkv视频合并的问题,就是MKV怎么合并视频,合并之后要保留MKV ...

  9. 多个select count 合并_Milvus查询合并机制

    (一)查询请求队列 Milvus的连接层使用gRPC对外提供RPC服务,以及oatpp框架对外提供RESTful服务.服务端的gRPC连接池设置的最大连接数是20,多个客户端同时发过来的查询请求被异步 ...

最新文章

  1. [CareerCup] 2.4 Partition List 划分链表
  2. 8软件遇到的问题及解决方法_问题解决8步法
  3. 负数对2取余_不同语言的负数取余问题
  4. 华为云计算之快照技术
  5. 金融贷款逾期的模型构建6——特征选择
  6. excel打印预览在哪里_打印小心机:轮页眉页脚的重要性
  7. codewars??? Is my friend cheating?
  8. nvidia的jetson系列的方案_NVIDIA Jetson Xavier NX开发者套件主要应用于自主机器边缘计算产品系列...
  9. Java并发编程:并发容器之ConcurrentHashMap(转载)
  10. php如何判断是否为json数据(格式)
  11. mysql Packet for query is too large (1185 1024)异常
  12. 15个国外最好的电子商务建站程序
  13. 描写火车站场景_优美段落:描写车站的经典美文摘抄
  14. mac鼠须管 在简体字模式如何繁体字
  15. H5音乐播放器(小清新版)
  16. Webpack工具 - 打包执行中的奇奇怪怪
  17. iOS11 iPhone X 适配指南
  18. 一、Java环境介绍
  19. 大陆居民在香港银行里怎么开帐户?
  20. 游戏遇上区块链,从试探到联盟。

热门文章

  1. [C++ STL algorithm] lower_bound、upper_bound、unique的本质
  2. 最大乘积(记忆化搜索)
  3. P4762-[CERC2014]Virus synthesis【PAM,dp】
  4. bzoj3482,jzoj3238-超时空旅行hiperprostor【最短路,凸包,斜率优化】
  5. P2742-二维凸包/圈奶牛Fencing the Cows【凸包】
  6. K8S Learning(2)——集群环境搭建
  7. 面试阿里挂了却拿到网易、点我达offer,一个三年经验Java程序员的面试总结
  8. 面对枯燥的源码,如何才能看得下去
  9. (八)Spring与MyBatis整合
  10. asp.net中条件查询+分页