java - 为什么 Java 8 没有 "myArray.stream()"函数?

标签 java arrays lambda

我想知道为什么 Java 8 不支持像在集合上那样在数组上使用流。你可以写

    Collection<String> myCollection = new ArrayList<String>();
    Stream<String> stream = myCollection.stream();

但是你不能写:

    String[] myArray = new String[] {};
    Stream<String> stream = myArray.stream();

我知道实用方法 Arrays.stream,因此可以改用它:

    Stream<String> stream = Arrays.stream(myArray);

但这让我想知道为什么在 lambda 表达式允许简单地编写这么多代码的上下文中需要这种笨拙的静态实用程序方法调用。我知道 Collection 的(基于对象/接口(interface)的)世界与 array 的更“原生”世界之间的显着差异。

谁能详细说说?

最佳答案

为了向数组添加方法,需要更改语言而不是库。与在类文件中定义成员的“常规”对象不同,数组定义了其成员 directly in the language specification .

这意味着添加 myArray.stream() 方法需要更改语言规范,并添加对编译器的支持。这种方法比添加 Arrays.stream(myArray) 复杂得多,后者可以完全在 Java 类库中轻松实现。

关于java - 为什么 Java 8 没有 "myArray.stream()"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41426546/

相关文章:

java - 需要合适的安卓模式

java - 无法在 maven 项目中导入 java.lang.reflect?

javascript - 在对象数组中查找重复值并合并一些重复的键和值

java - 初始化数组的 Lambda 表达式

java - 使用 JPA 获取旧数据

java - mysql - 一种检查查询是否更新/删除/创建或选择的方法

javascript - 根据其他对象的数组属性对对象数组进行排序的最快方法

ios - 为 UITableView 中的每个部分添加特定数据 - Swift

node.js - HTTP 请求问题 内部服务器错误

java - 检查是否全部为真并使用 Java 8 的单行 lambda 表达式重置 boolean [] 数组