我有下面的代码,我获取一个字符串数组并将其转换为一个字符数组。 我如何对其进行转换以便使用 lambda 函数?
int m = 1;
for (String v : value) if (v.length() >= m) m = v.length();
char[][] a = new char[value.length][m];
for (int i = 0; i < value.length; i++) a[i] = value[i].toCharArray();
return countOcc(a);
}
我尝试使用
Arrays.stream().foreach()
如下所示,但是当我执行 c++ 之类的操作时,它给了我一个错误
public final int countOcc (String[] value) {
int m = 1;
Arrays.stream(value).forEach(e -> {
if (e.length() >= m) m = e.length();
});
char[][] a = new char[value.length][m];
int c = 0;
Arrays.stream(value).forEach(e -> {
a[c] = e.toCharArray();
c++;
});
return countOcc(a);
}
在我看来,你想要一个 lambda 将
value
(我认为是 String[]
)转换为 char[][] a
。虽然没有直观且明显的方法可以做到这一点,但如果您愿意克服一些困难,这是可能的。首先,您需要一个索引(代码中的i
)。因此生成从 0
到 value.length
(不包括)的范围。将每个 i
映射到相应的 value
并在其上调用 toCharArray()
。然后收集到一个List
,最后使用toArray(T[])
方法。喜欢,
char[][] a = IntStream.range(0, value.length) //
.mapToObj(i -> value[i].toCharArray()) //
.collect(Collectors.toList()) //
.toArray(new char[0][]);
我测试过的像
String[] value = { "Hello", "World" };
char[][] a = IntStream.range(0, value.length) //
.mapToObj(i -> value[i].toCharArray()) //
.collect(Collectors.toList()) //
.toArray(new char[0][]);
System.out.println(Arrays.deepToString(a));
并且得到了
[[H, e, l, l, o], [W, o, r, l, d]]