如何从包含数组的数组中删除空值

Cod*_*ter 2 java arrays string java-8 java-stream

我有这样的数组

String arr[][] = {{"abc"}, {"bcd"}, {null}}
Run Code Online (Sandbox Code Playgroud)

这是多维数组(在数组中带有的单字符串数组)。我想删除这些空值,并希望最终结果为{{"abc"}, {"bcd"}}。此数组可以是任何大小,并且可以有任意数量的null

我尝试过这样的事情。我知道我可以使用传统的for循环,但是我想使用java8或更有效地做到这一点。

 String arr1[][] = Arrays.stream(arr)
            .filter(str -> (((str != null) && (str.length > 0))))
            .toArray(String[][]::new);
Run Code Online (Sandbox Code Playgroud)

And*_*cus 6

您可以使用来自Arrays帮助器类的流过滤器非空值:

String arr[][] = {{"abc"}, {"bcd"}, {null}};

String result[][] = Arrays.stream(arr)
    .map(innerArray -> Arrays.stream(innerArray).filter(Objects::nonNull).toArray(String[]::new))
    .toArray(String[][]::new);
Run Code Online (Sandbox Code Playgroud)

编辑:

正如@Andreas指出的那样,这留下了空的内部数组,我们需要使用extra过滤它们filter(innerArray -> innerArray.length > 0)。最后:

String result[][] = Arrays.stream(arr)
    .map(innerArray -> Arrays.stream(innerArray).filter(Objects::nonNull).toArray(String[]::new))
    .filter(innerArray -> innerArray.length > 0)
    .toArray(String[][]::new);
Run Code Online (Sandbox Code Playgroud)