如何在ArrayList中过滤空值

时间:2019-03-26 01:20:54

标签: java jpa arraylist spring-data-jpa jpa-criteria

我有一个很大的代码。我遇到一个问题,在代码刚开始时为null  被插入到arraylist 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和空白一样,是否有人可以帮助我提供一些还可以检查null inside arraylist的API。

2 个答案:

答案 0 :(得分:3)

这里是通用解决方案:

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

答案 1 :(得分:1)

使用流看起来像

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