Как отфильтровать нулевые значения в ArrayList - PullRequest
1 голос
/ 26 марта 2019

У меня очень большой код.Я столкнулся с проблемой, когда при самом запуске кода null вставляется в arraylist custlist, то есть custlist выглядит как [null].И после многих строк кода у меня были изменения кода, когда я собирал Predicate, используя 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 () выполняет проверку на пустоту и пустоту одновременно, если кто-то может помочь мне с некоторым API, который также может проверять null inside arraylist.

Ответы [ 2 ]

3 голосов
/ 26 марта 2019

Вот общее решение:

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 голос
/ 26 марта 2019

с использованием потока будет выглядеть как

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