java – 如何从数组创建流?

目前,每当我需要从数组创建流,我做

String[] array = {"x1", "x2"};
Arrays.asList(array).stream();

有没有一些直接的方法从数组创建流?

您可以使用Arrays.stream例如

Arrays.stream(array);

你也可以使用@fge提到的Stream.of,它看起来像

public static<T> Stream<T> of(T... values) {
    return Arrays.stream(values);
}

但是注意Stream.of(intArray)将返回Stream< int []>而Arrays.stream(intArr)将返回IntStream,只要你传递一个int []类型的数组。所以在简单的基本类型,你可以观察到两种方法的区别。

int[] arr = {1, 2};
Stream<int[]> arr1 = Stream.of(arr);

IntStream stream2 = Arrays.stream(arr); 

当您将原始数组传递给Arrays.stream时,将调用以下代码

public static IntStream stream(int[] array) {
    return stream(array, 0, array.length);
}

并且当您将原始数组传递给Stream.of时,将调用以下代码

 public static<T> Stream<T> of(T t) {
     return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
 }

因此你得到不同的结果。

更新:如Stuart Marks评论所述
Arrays.stream的子范围重载优于使用Stream.of(array).skip(n).limit(m),因为前者导致SIZED流,而后者不导致。原因是limit(m)不知道大小是m还是小于m,而Arrays.stream则执行范围检查并知道流的确切大小
您可以读取由Arrays.stream(array,start,end)here返回的流实现的源代码,而Stream.of(array).skip()。limit()返回的流实现在this method内。

http://stackoverflow.com/questions/27888429/how-can-i-create-a-stream-from-an-array

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 如何从数组创建流?