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(); // 可以,但一般不推荐用于具体类型
推荐写法:用带参数的 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[]</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[]</integer>
注意点:空 Stream 和 null 安全
toArray(xxx::new) 对空 Stream 也安全,会返回长度为 0 的对应类型数组,无需额外判空。
但若传入的构造器为 null(如 stream.toArray(null)),会抛 NullPointerException。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











