如何从数组创建流?
2022-08-31 08:00:12
目前,每当我需要从数组创建流时,我都会这样做
String[] array = {"x1", "x2"};
Arrays.asList(array).stream();
有没有一些直接的方法可以从数组创建流?
目前,每当我需要从数组创建流时,我都会这样做
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);
}
但是 note 将返回,而将返回,前提是您传递类型为 .因此,简而言之,对于基元类型,您可以观察到2种方法之间的差异,例如: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 注释 中提到的,子范围重载比使用更可取,因为前者会产生 SIZE 流,而后者则不会。原因是不知道大小是 m 还是小于 m,而范围检查并知道流的确切大小 您可以读取此处返回的流实现的源代码,而返回的流实现 在此方法中。Arrays.stream
Stream.of(array).skip(n).limit(m)
limit(m)
Arrays.stream
Arrays.stream(array,start,end)
Stream.of(array).skip().limit()
@sol4me解决方案的替代方案:
Stream.of(theArray)
关于这 和 之间的区别:如果您的数组是基元类型,它确实会有所不同。例如,如果您执行以下操作:Arrays.stream()
Arrays.stream(someArray)
其中 是 ,它将返回 .,则返回具有单个元素的 。someArray
long[]
LongStream
Stream.of()
Stream<long[]>