java集合中去除空值

今天在一个

List<String> 的类型中踩了一个坑

总共是两个sql,第一个使用removeIf没出问题,第二个使用的时候却报null了,到底是什么情况

第一个sql

SELECT
        distinct c.realname
FROM table a
LEFT JOIN sys_user c ON c.username = a.employee_name

查询出来是
在这里插入图片描述
因为我在查询中使用了join查询然后没查出来的内容因此固定为null,在java代码中使用了removIf过滤不会存在问题

第二段sql是直查的

SELECT
   distinct  a.job_name
FROM table a

然而结果出乎我所料,在这个数据中竟然存在空字符串数据
在这里插入图片描述

而空字符串在removeIf(String::isEmpty)是不识别的,直接报错,
需要将这段改为removeIf(Strings::isEmpty),否则String是无法完成空字符串的判断的

上面说的这是效率最高的一种方法,要去除空值之外还有几种方法,例如

       // 1、迭代器
       Iterator<String> iterator = processList.iterator();
        while (iterator.hasNext()) {
            if (Strings.isEmpty(iterator.next())) {
                iterator.remove();
                break;
            }else{
			// 其他操作...
			}
        }
        
		// 2.for-each循环
		 processList.forEach(item-> {
            if (Strings.isEmpty(item)) {
                processList.remove(item);
            }else{
				// 其他操作...
			}
        });

		// 3.for循环
		  for (String process : processList) {
            if (Strings.isEmpty(process)){
                processList.remove(process);
                break;
            }else{
                // 其他操作...
            }
        }

以上几种根据业务场景选择合适的方法即可

Java ,如果你有一个 List<Map> 的集合,并且你需要移除所有值为空的 Map 对象,你可以通过遍历这个列表并使用 Lambda 表达式来完成。以下是一个示例: ```java List<Map<String, String>> mapList = new ArrayList<>(); // 假设 mapList 已经填充了数据 mapList.removeIf(map -> map.values().stream().allMatch(Objects::nonNull)); ``` 这里是如何解释上述代码的步骤: 1. **初始化 List**:首先创建了一个包含一些 Map 对象的 List。 2. `removeIf` 方法接收一个 Lambda 表达式作为参数。这个 Lambda 表达式的参数是 `map` 类型,表示将对列表的每个元素应用此操作。 3. `map.values().stream()` 将列表的每个 Map 转换为 Stream。Stream 提供了一种强大的流式操作模式,允许我们对数据进行更复杂的处理。 4. `.allMatch(Objects::nonNull)` 部分用于检查 Stream 的所有元素是否都非空。这里使用了 `Objects.nonNull` 方法来检查元素是否非 null 和非空。 - 如果列表的任何一个 Map 具有空值,则 `allMatch` 返回 false,并且该 Map 会被从原始列表移除。 5. 最终,调用 `removeIf` 方法会删除满足条件的所有 Map 对象,即那些值存在空项的 Map 对象。 --- ## 相关问题: 1. 是否有其他方法可以避免使用 `removeIf` 进行过滤? 2. 在 Java ,如何验证 Map 是否完全为空(即没有键值对)? 3. 为什么在处理大量数据时需要小心地使用过滤和删除操作?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值