如何在数组列表中过滤空值



我有一个非常大的代码。我遇到了一个问题,在代码一开始,null 插入数组列表custlist即 custlist 看起来像 [null]。经过许多行代码,我进行了代码更改,我正在使用custlist构建谓词,如下所示:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Customer> q = cb.createQuery(Customer.class);
Root<Customer> root = q.from(Customer.class);
q.select(root);
if (!CollectionUtils.isEmpty(custlist)){
Predicate predicate1 =root.get("custid").in(custlist);
}
q.where(predicate1);
TypedQuery<Customer> tq = em.createQuery(q);
List<Customer> allcust= tq.getResultList();

因此,自(custlist != null && !custlist.isEmpty())以来,第一次检查就通过了并建立了谓词。这在执行最终查询时给了我错误。我的问题是 - 无论如何,我可以确保仅在 custlist 没有空值时才创建谓词。我的问题是 - 就像 Collectionutils.isEmpty(( 同时检查空和空一样,如果有人可以帮助我使用一些也可以检查null inside arraylist的 API。

这里有一个通用的解决方案:

private static ArrayList<String> list = new ArrayList<String>();
public static void main(String[] args) {
    list.add("foo");
    list.add("bar");
    if (!list.isEmpty() && !list.contains(null))
        System.out.println("ok");
    list.add(null);
    if (!list.isEmpty() && !list.contains(null))
        System.out.println("not ok");
}

结果

ok

使用该流看起来像

myList.stream().filter(x-> x!=null).collect(Collectors.toList())

最新更新