Коллекция Java без нулевого объекта

Есть ли какая-нибудь коллекция в java, которая не добавит нулевой объект? Получив список элементов, запросите БД для этих элементов, когда результат будет возвращен из БД, я добавлю элемент в список результатов, если он существует в БД, если он не возвращает БД ноль, тогда я откажусь от него .

У меня есть следующий код:

reqIds.forEach(
        reqId -> {
          columnValueMap.clear();
          columnValueMap.put("request_id", reqId);
          EventAudit auditRecord =
              pollDatabaseFindByIdAndKey(
                  EventAudit.class, columnValueMap);

          if (auditRecord != null) {
            auditMap.put(auditRecord.getRequestId(), auditRecord);
          }
        });

я знаю, что могу использовать потоковый фильтр Java для фильтрации нулевого значения, но просто интересно, есть ли какая-либо интеллектуальная коллекция, которая автоматически отклонит нулевой объект, поэтому мне не нужно выполнять дополнительную проверку нулевого значения

вы можете использовать внешние библиотеки, такие как google guava или apache commons, посмотрите stackoverflow.com/questions/6433478/…

nader.h 29.05.2019 17:17

Ничего, что вы хотели бы. Только коллекции, которые выдают исключения при попытке добавить null. Также не рекомендуется реализовывать такую ​​коллекцию, поскольку молчаливое отбрасывание данных не является очевидным поведением, в то время как if (foo != null) add (foo) дает понять, что происходит.

zapl 29.05.2019 17:20

Похоже, вам нужна карта. Согласно github.com/google/guava/wiki/LivingWithNullHostileCollection‌​ConcurrentHashMap не разрешает nulls

bracco23 29.05.2019 17:20

@Sunchezz Вы уверены, что получите набор без нулевых объектов? Документы Java прямо заявили: «Этот класс разрешает нулевой элемент»

Robert Kock 29.05.2019 17:21

@RobertKock, ты прав. удалил мой комментарий. Не знаю, откуда взялось это знание :( Думал, я где-то это читал...

Sunchezz 29.05.2019 17:27

Может есть и хорошие ответы здесь

Sunchezz 29.05.2019 17:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
744
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для этого вы можете использовать коллекцию apache commons,

import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.PredicateUtils;
import com.google.common.collect.Lists;

public class Test {
    public static void main(String[] args) {
        List<Integer> l = Lists.newArrayList(1, 2, 3, null, 7, null, 8, null);
        CollectionUtils.filter(l, PredicateUtils.notNullPredicate());
        System.out.println(l);
    }
}

вышеприведенный код будет печатать вывод как угодно,

[1, 2, 3, 7, 8]

Посмотрите на java-документ Коллекция и его определение add:

If a collection refuses to add a particular element for any reason other than that it already contains the element, it must throw an exception (rather than returning false). This preserves the invariant that a collection always contains the specified element after this call returns.

а также

NullPointerException - if the specified element is null and this collection does not permit null elements

Как видите, такой Collection нарушил бы контракт, определенный в интерфейсе Collection. Вам придется искать сторонние библиотеки, чтобы выполнить то, что вы хотите, но я настоятельно рекомендую вам не использовать такую ​​​​коллекцию, поскольку она нарушает несколько предположений принцип наименьшего удивления, когда пользователь, которому удобно работать с другими коллекциями, получает неожиданное поведение.

Другие вопросы по теме