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.streamStream.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的主要内容,如果未能解决你的问题,请参考以下文章

Stream

javaStream的使用

JAVA8新特性

如何将字符串拆分为字符串流?

如果使用Arrays Stream的整数数组的总和超过int max value(2147483647),如何处理?

Stream.of()用法示例