Java中Stream转数组需用toArray(),泛型流须传入类型构造器如String[]::new,基本类型需先转IntStream等再调用toArray(),空Stream安全但null构造器会抛NPE。

Java 中 Stream 流转普通数组,核心是调用 toArray() 方法,但要注意泛型类型和数组创建方式,否则容易报错或得到 Object[]。
基础写法:转为 Object[] 数组
如果 Stream 是泛型的(比如 Stream<string></string>),直接调用无参 toArray() 会返回 Object[],不能直接强转为具体类型数组:
String[] arr = stream.toArray(); // 编译失败:类型不匹配
Object[] arr = stream.toArray(); // 可以,但一般不推荐用于具体类型
立即学习“Java免费学习笔记(深入)”;
推荐写法:用带参数的 toArray() 创建指定类型数组
传入一个数组构造器(方法引用),让 Stream 自动创建对应类型的数组:
-
stream.toArray(String[]::new)→ 返回String[] -
stream.toArray(Integer[]::new)→ 返回Integer[] -
stream.toArray(int[]::new)→ ❌ 不行!基本类型数组需用专用流(如IntStream)
示例:
List<String> list = Arrays.asList("a", "b", "c");<br>String[] arr = list.stream().toArray(String[]::new); // ✅ 得到 String[]
基本类型数组:必须用对应原始类型流
Streamint[]、long[] 等。需先转成原始类型流:
-
int[]→ 用mapToInt()+toArray() -
double[]→ 用mapToDouble()+toArray()
示例:
List<Integer> nums = Arrays.asList(1, 2, 3);<br>int[] intArr = nums.stream().mapToInt(Integer::intValue).toArray(); // ✅ int[]
注意点:空 Stream 和 null 安全
toArray(xxx::new) 对空 Stream 也安全,会返回长度为 0 的对应类型数组,无需额外判空。
但若传入的构造器为 null(如 stream.toArray(null)),会抛 NullPointerException。


















