java - 如何从包含数组的数组中删除空值
问题描述
我有一个这样的数组
String arr[][] = {{"abc"}, {"bcd"}, {null}}
这是多维数组(数组中的单个字符串数组)。我想删除那些空值并希望最终结果为{{"abc"}, {"bcd"}}
. 该数组可以是任意大小,并且可以有任意数量的空值
我尝试过这样的事情。我知道我可以使用传统的 for 循环,但我想使用 java8 或更有效地做到这一点。
String arr1[][] = Arrays.stream(arr)
.filter(str -> (((str != null) && (str.length > 0))))
.toArray(String[][]::new);
解决方案
您可以使用来自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);
编辑:
正如@Andreas 指出的那样,这会留下空的内部数组,我们需要使用附加过滤它们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);
推荐阅读
- javascript - 如何在 Relay 中获取 `initialQueryRef`?
- javascript - 我的倾斜 js 不工作卡不倾斜 4 小时内需要帮助
- excel - 谷歌表格:使用哪种时间格式来显示和转换小时到分钟?
- magento - 单一商店设置不显示在网站级别保存的值
- api - 在 Nexus 中获取工件的最新版本
- javascript - 如何在提交时将一个表单的值提交到另一个表单
- javascript - 带标识符的表数据导出
- dart - 对私有字段或抽象方法使用混入 Dart
- window-managers - awesomewm 重映射标签显示
- u-boot - 从 u-boot 写入 eMMC boot0 分区