Arrays.Stream 与 Stream.of
Posted
技术标签:
【中文标题】Arrays.Stream 与 Stream.of【英文标题】:Arrays.Stream vs Stream.of 【发布时间】:2021-11-18 06:37:51 【问题描述】:为什么我在使用 Arrays.stream 和 Stream.of 时会得到不同的值,理想情况下两者都应该返回相同的值
我/p:
int num[]= 1,2,3,4;
System.out.println(Arrays.stream(num).count());
o/p:
4
我/p:
int num[]= 1,2,3,4;
System.out.println(Stream.of(num).count());
o/p:
1
【问题讨论】:
【参考方案1】:看一下Arrays.stream
和Stream.of
的代码,了解更多:
public static IntStream stream(int[] array)
return stream(array, 0, array.length);
其中一个签名中的Arrays.stream 采用int[]
并将此数组中的值拆分为4。
但是
public static<T> Stream<T> of(T t)
return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
取了一个 T 类型的对象,因为 int[]
被认为是一个统一体,例如,如果你使用:
Stream.of(new int[]1, 2, 3, new int[]4, 5).count()
您将获得 2 个。
要获得与Arrays.stream
相同的结果,您可以在of(..)
之后使用flatMapToInt
:
Stream.of(num2).flatMapToInt(Arrays::stream).count()
【讨论】:
或使用IntStream.of(...)
。但我认为Arrays.stream
是流过现有数组的惯用方式。以上是关于Arrays.Stream 与 Stream.of的主要内容,如果未能解决你的问题,请参考以下文章