我想知道为什么 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/