跳到主要内容

JEP 107:集合的批量数据操作

概括

向 Java 集合框架添加对数据进行批量操作的功能。这通常被称为“Java 的过滤/映射/减少”。批量数据操作包括串行(在调用线程上)和并行(使用许多线程)版本的操作。对数据的操作通常表示为 lambda 函数。

目标

利用 lambda 函数(包括并行操作)提供批量数据处理的新功能

非目标

将现有用法转换为并行操作。

动机

Google 内部使用的 FlumeJava 和 Microsoft 提供的 PLinq 是最直接相似的产品。尤其是 Linq 和 Plinq 被 .NET 开发人员视为极其有价值,并且是 Java 开发人员羡慕的对象。

主要的好处是对于当前构建单线程业务流程应用程序的开发人员来说。能够在对应用程序进行最小更改的情况下利用并发性预计会带来巨大的好处。

描述

串行实现提供了从现有集合批量数据操作到并行操作的桥梁,而不会更改应用程序的线程模型。

并行实现是该功能的核心要素。并行操作通过在多个线程(处理器)之间划分任务,提供了加速大量数据操作的机会。并行实现基于 Java 7 中引入的 java.util.concurrency Fork/Join 实现构建。

对于串行和并行实现,“急切”模式和“惰性”模式都是可能的。在急切模式中,对数据的操作是在调用操作函数时直接对数据执行的。在惰性模式下,对数据的操作将被推迟,直到请求最终结果为止。惰性模式操作允许基于数据和要执行的操作的重组来实现更多优化机会。

测试

基准测试和性能回归测试对于提供高质量的最终产品至关重要。

这项工作将需要大量的硬件资源来进行全面测试。 IE。适用于所有主要支持平台的专用 8+ 核心系统。

依赖关系

  • Lambda 语言更改
  • JEP 109 中描述的核心库更改
  • JSR 335 EG 和 JSR 166 EG 以及 Doug Lea 的参与

影响

  • 兼容性:仅向前兼容
  • 安全性:标准
  • 性能/可扩展性:需要大量测试和基准测试
  • 用户体验:无
  • I18n/L10n:无
  • 可移植性:100% java 实现。没有计划本机代码。
  • 打包/安装:作为 JRE 安装的一部分提供
  • 文件:标准
  • TCK:没有特殊要求。将需要新的 TCK 测试。
  • 国际化:与JCF相同
  • 本地化:无