如何将每个循环转换为每个循环的 lambda?

问题描述 投票:0回答:1

我有下面的代码,我获取一个字符串数组并将其转换为一个字符数组。 我如何对其进行转换以便使用 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);
}
java lambda
1个回答
0
投票

在我看来,你想要一个 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]]
© www.soinside.com 2019 - 2024. All rights reserved.