如何使用Java 8 Stream API收集String[][]?代码异常求助
解决Java 8 Stream收集String[][]的问题
嘿,刚接触Java 8 Stream API是吧?我看你这段代码的问题主要出在结果收集的步骤上,咱们来一步步修正它~
问题出在哪?
你现在用collect(String[][]::new)是不对的:collect方法需要的是一个Collector实现(比如用来收集到List、Map这类容器),直接传入数组的构造引用完全不符合它的要求,这就是代码无法运行的核心原因。
而对于Stream<String[]>这种流,要转换成String[][]二维数组,Stream API给我们提供了更合适的toArray方法,而不是collect。
修正后的代码
public static String[][] meeting(String s) { return Arrays.stream(s.split(";")) // 过滤掉拆分后可能出现的空字符串(比如原字符串末尾的分号会导致空元素) .filter(str -> !str.isEmpty()) .map(str -> str.split(":")) // 用toArray生成目标二维数组,这里的构造引用用来指定数组类型 .toArray(String[][]::new); }
关键细节说明
- 过滤空元素:原字符串末尾的
;会让split(";")得到一个空字符串元素,所以加上.filter(str -> !str.isEmpty())可以去掉这个多余的元素,确保结果完全符合你想要的[[Fred,Corwill],[Wilfred,Corwill]]。 - 用toArray生成数组:
toArray(String[][]::new)会根据流中元素的数量创建对应长度的String[][]数组,然后把每个String[](也就是拆分后的名字和姓氏)依次填充进去,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Сергей Чамкин
相关产品推荐
相关产品推荐

