【问题标题】:Arrays.Stream vs Stream.ofArrays.Stream 与 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

【问题讨论】:

    标签: arrays java-8 functional-programming java-stream


    【解决方案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 是流过现有数组的惯用方式。
    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2017-06-22
    • 2022-11-03
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多