最常用方式是arrays.stream():对引用数组返回stream,对基本类型数组返回对应原始类型流(如intstream),支持范围截取;stream.of()仅适用于引用类型且不能直接处理基本类型数组。

Java 中从数组创建 Stream 流最常用、最直接的方式是使用 Arrays.stream() 方法。它支持基本类型数组(如 int[]、double[])和引用类型数组(如 String[]、Person[]),返回对应类型的流,可立即进行过滤、映射、聚合等操作。
用 Arrays.stream() 创建流(推荐)
这是标准且最简洁的方式:
- 对引用类型数组:
Arrays.stream(stringArray)返回Stream<string></string> - 对基本类型数组:
Arrays.stream(intArray)返回IntStream(不是Stream<integer></integer>),性能更好 - 也可指定范围:
Arrays.stream(arr, fromIndex, toIndex),注意toIndex是**排他性**的(不包含)
示例:
String[] names = {"Alice", "Bob", "Charlie"};long count = Arrays.stream(names).filter(s -> s.length() > 4).count(); // 结果为 1
用 Stream.of() 创建流(仅适用于引用类型)
Stream.of(T... values) 接收可变参数,本质是把传入的元素当作一个“临时数组”来构建流。它不能直接接收已存在的基本类型数组(否则会把整个数组当做一个元素):
- ✅ 正确:
Stream.of("a", "b", "c")→Stream<string></string> - ✅ 正确:
Stream.of(stringArray)→Stream<string></string>(注意:结果是含一个数组元素的流!) - ❌ 错误:
Stream.of(intArray)→ 得到Stream<int></int>,不是你想要的数值流
若硬要用 Stream.of 处理已有引用数组,需配合 Arrays.asList().stream()(但多一步装箱,不推荐)。
基本类型数组的特别注意点
不要用 Stream.of(myIntArray),它不会自动拆箱。正确做法只有:
-
Arrays.stream(myIntArray)→IntStream - 需要
Stream<integer></integer>时,再调用.boxed():Arrays.stream(myIntArray).boxed() - 同理:
Arrays.stream(doubleArray)→DoubleStream;Arrays.stream(longArray)→LongStream
小技巧:避免常见陷阱
- 数组为
null时,Arrays.stream(null)会抛NullPointerException,建议提前判空 - 流只能消费一次,重复调用
count()或forEach()会报IllegalStateException - 若需多次使用,可转成集合(如
toList())或重新生成流
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











