为何Java的stream()处理分割字符串会生成Object数组?如何获取String数组?
如何将字符串转换为String类型数组
针对你的需求,这里提供两种直接获取String[]的方法:
方法一:直接使用split方法
String.split()方法本身就会返回String[]类型的数组,不需要额外通过Stream处理,最简单直接:
String input = "Aaaa Bbbb Cccc"; String[] stringArray = input.split(" "); // 验证类型和内容 System.out.println(stringArray.getClass()); // 输出 class [Ljava.lang.String; System.out.println(Arrays.toString(stringArray)); // 输出 [Aaaa, Bbbb, Cccc]
方法二:通过Stream生成指定类型数组
如果需要在Stream中做额外操作(比如过滤、转换),则需要在toArray()方法中指定数组类型的生成器,而不是用无参的toArray()(无参版本默认返回Object[]):
String input = "Aaaa Bbbb Cccc"; String[] stringArrayFromStream = Arrays.stream(input.split(" ")) // 可在此添加Stream操作,比如 .filter(s -> !s.isEmpty()) .toArray(String[]::new); // 验证类型 System.out.println(stringArrayFromStream.getClass()); // 输出 class [Ljava.lang.String;
为什么之前得到Object类型数组?
无参的Stream.toArray()方法无法推断你需要的具体数组类型,所以默认生成Object[]。而toArray(String[]::new)通过方法引用明确告诉Stream要创建String[]类型的数组,就能得到你想要的结果。
内容的提问来源于stack exchange,提问作者Lázaro Damasceno
相关产品推荐
相关产品推荐

