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

Seb*_*anH 3 java arrays lambda

我想知道为什么Java 8不支持在数组上使用流,就像它在集合上一样.你可以写

    Collection<String> myCollection = new ArrayList<String>();
    Stream<String> stream = myCollection.stream();
Run Code Online (Sandbox Code Playgroud)

但你不能写:

    String[] myArray = new String[] {};
    Stream<String> stream = myArray.stream();
Run Code Online (Sandbox Code Playgroud)

我知道实用方法Arrays.stream,所以可以使用它:

    Stream<String> stream = Arrays.stream(myArray);
Run Code Online (Sandbox Code Playgroud)

但它让我想知道为什么在lambda表达式允许简单编码这么多的上下文中需要这种笨拙的静态实用方法调用.我知道(基于对象/接口)世界Collection和更"本土"世界之间的显着差异array.

谁可以详细说明这个?

das*_*ght 6

为了向数组添加方法,需要更改语言而不是库.与在类文件中定义成员的"常规"对象不同,数组的成员直接在语言规范中定义.

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