Java中将数组转Stream最常用Arrays.stream():对象数组返回Stream<T>,基本类型数组返回IntStream等;需转引用类型流时用boxed(),截取子区间可用Arrays.stream(array, from, to)。

Java 中将普通数组转换为 Stream 流,最常用、最直接的方式是使用 Arrays.stream() 方法。
基本用法:Arrays.stream()
该方法适用于所有类型的数组(基本类型和引用类型),会返回对应的 Stream:
- 对于对象数组(如
String[]、Integer[]),Arrays.stream(arr)返回Stream<T> - 对于基本类型数组(如
int[]、double[]),它返回对应的基本类型流(IntStream、DoubleStream等),不是Stream<Integer>
示例:
String[] strs = {"a", "b", "c"};
Stream<String> stream1 = Arrays.stream(strs);
int[] nums = {1, 2, 3};
IntStream stream2 = Arrays.stream(nums); // 注意:不是 Stream<Integer>
如果需要把基本类型数组转成引用类型 Stream
比如想把 int[] 转为 Stream<Integer>(便于统一处理或后续调用泛型方法),不能直接用 Arrays.stream(),需先装箱:
立即学习“Java免费学习笔记(深入)”;
- 用
Arrays.stream(arr).boxed()—— 最简洁 - 或用
Stream.of()配合Arrays.asList()(仅适用于对象数组,不适用于基本类型)
示例:
int[] nums = {1, 2, 3};
Stream<Integer> boxedStream = Arrays.stream(nums).boxed();
// ✅ 正确:Stream.of 适合对象数组
String[] arr = {"x", "y"};
Stream<String> s = Stream.of(arr);
// ❌ 错误:Stream.of(int[]) 会把整个数组当做一个元素
int[] a = {1,2,3};
Stream<int[]> wrong = Stream.of(a); // 不是 Stream<Integer>
注意边界:不要混淆 Stream.of() 和 Arrays.stream()
Stream.of() 接收的是**可变参数**,对数组的处理容易出错:
-
Stream.of(new String[]{"a","b"})→ 得到Stream<String[]>(一个元素:整个数组) -
Stream.of("a", "b")→ 得到Stream<String>(两个元素) - 所以对象数组推荐用
Arrays.stream();基本类型数组只能用Arrays.stream()
小技巧:从数组某段范围创建 Stream
Arrays.stream(array, fromIndex, toIndex) 支持截取子区间(右开区间,toIndex 不包含):
int[] data = {10, 20, 30, 40, 50};
IntStream sub = Arrays.stream(data, 1, 4); // 20, 30, 40
这对分批处理或跳过头尾数据很实用。


















