public static String[][] toMatrix(List<String> data) {
return data.stream()
.map(str -> str.chars().mapToObj(e -> (char)e).collect(Collectors.toList()).stream().toArray(String[]::new))
.toArray(String[][]::new);
}
代码应该来自["aaa", "bbb", "ccc"]make[[a,a,a], [b,b,b], [c,c,c]]
你的表达式
(char)e).collect(Collectors.toList()).stream()是类型Stream<Character>,它不能折叠成String[],只能折叠成Character[]解决方案很简单 - 只需将列表的每一行写入其自己的数组:
您还可以使用“长”路径从单个字符串元素创建数组
.map(s -> Stream.of(s).toArray(String[]::new)),但在这种情况下,创建流以立即调用其方法toArray显然是多余的。更新原始愿望清单已被大幅更改,以获取每个字符串的逐字母数组。
使用以下命令可以轻松地将字符串拆分为字符数组
String::split(""):出口:
一切都通过 Stream API 中常见的 forEach 来解决(据我所知,您需要用它来解决问题,因为在常见的 for 循环的帮助下,这已经基本解决了)。这里唯一的障碍是 Final int[] i = {0}; 行 在 lambda 表达式中,我们只能使用 Final 变量或等效的 Final 变量。因此,我从单个元素创建一个数组,并使用它在 lambda 表达式中进行迭代。由于通常的final int i=0 Java 不允许我迭代(又名final)。