一尘不染

如何从数组创建流?

java

目前,每当我需要从数组创建流时,我都会

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

有一些直接的方法可以从数组创建流吗?


阅读 211

收藏
2020-09-08

共1个答案

一尘不染

您可以使用Arrays.stream Eg

Arrays.stream(array);

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

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

但是note
Stream.of(intArray)将返回,Stream<int[]>Arrays.stream(intArr)如果IntStream您传递一个type数组,则将返回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()is
返回的流实现的源代码是在这种方法内

2020-09-08