You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么使用Arrays.stream和Stream.of处理基础类型数组得到的结果不同?

Java Stream两种int数组处理方式结果差异的根因

两段代码的底层执行逻辑差异

  • 第一段代码Arrays.stream(num)

    Arrays类针对基础类型数组提供了专属重载方法Arrays.stream(int[] array),该方法会直接返回IntStream类型的流,流中元素就是传入int数组的每一个int值,因此统计元素总数得到的是数组长度4。

  • 第二段代码Stream.of(num)

    Stream.of()的入参为泛型对象类型,有两个常用重载:

    1. Stream.of(T t):接收单个对象,返回仅包含该对象的流
    2. Stream.of(T... values):接收多个对象/对象数组,返回包含所有数组元素的流
      你传入的int[]属于基本类型数组,本身是一个引用类型对象,不属于对象数组,因此JVM会匹配第一个重载,把整个int数组当作单个元素存入流中,此时流的泛型为Stream<int[]>,总元素数自然为1。

扩展:使用Stream.of()得到相同结果的方案

如果要让Stream.of()统计得到4,有两种实现方式:

  1. 将基本类型int数组替换为包装类型Integer数组:
    Integer num[] = {1,2,3,4};
    System.out.println(Stream.of(num).count()); // 输出4
    
    此时Stream.of()会匹配对象数组的可变参数重载,流中包含4个Integer元素。
  2. 对基本类型数组的流做扁平化处理:
    System.out.println(Stream.of(num).flatMapToInt(arr -> Arrays.stream(arr)).count()); // 输出4
    

内容的提问来源于stack exchange,提问作者Saipriyadarshini Bandi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:39:02