今天在一个
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{
// 其他操作...
}
}
以上几种根据业务场景选择合适的方法即可