流2D数组,修剪值并收集回2D数组

时间:2019-12-23 10:59:23

标签: java multidimensional-array stream

任何想法如何对字符串的二维数组执行修剪操作,例如3x3使用Java流API并收集一个返回相同尺寸的3x3数组?

关键是要避免使用显式的for循环。

当前的解决方案是简单地执行如下的for循环:

String arr[][] = {{"  word  ","  word  "},{"  word  ","  word  "},{"  word  ","  word  "}};

for (int i=0; i<arr.length; i++){
    for (int j=0; j<arr[i].length; j++){
        arr[i][j] = arr[i][j].trim
    }
}

那行得通,但是我正在尝试提出一种与流API相同的方法。

2 个答案:

答案 0 :(得分:0)

您可以使用Arrays.stream来流式处理数组,如下所示:

arr=Arrays.stream(arr).map(s -> Arrays.stream(s).map(a->a.trim()).toArray(String[]::new)).toArray(String[][]::new);

您可以先传输第一个维度,然后再传输第二个维度。

答案 1 :(得分:0)

您可以使用 IntStream.forEach 方法处理当前数组而无需创建新数组:

String[][] arr = {
        {"  word  ", "  word  "},
        {"  word  ", "  word  "},
        {"  word  ", "  word  "}};

IntStream.range(0, arr.length)
        .forEach(i -> IntStream.range(0, arr[i].length)
                .forEach(j -> arr[i][j] = arr[i][j].trim()));

// output
Arrays.stream(arr).map(Arrays::toString).forEach(System.out::println);

输出:

[word, word]
[word, word]
[word, word]