Есть ли какая-нибудь коллекция в 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 для фильтрации нулевого значения, но просто интересно, есть ли какая-либо интеллектуальная коллекция, которая автоматически отклонит нулевой объект, поэтому мне не нужно выполнять дополнительную проверку нулевого значения
Ничего, что вы хотели бы. Только коллекции, которые выдают исключения при попытке добавить null
. Также не рекомендуется реализовывать такую коллекцию, поскольку молчаливое отбрасывание данных не является очевидным поведением, в то время как if (foo != null) add (foo)
дает понять, что происходит.
Похоже, вам нужна карта. Согласно github.com/google/guava/wiki/LivingWithNullHostileCollectionConcurrentHashMap
не разрешает null
s
@Sunchezz Вы уверены, что получите набор без нулевых объектов? Документы Java прямо заявили: «Этот класс разрешает нулевой элемент»
@RobertKock, ты прав. удалил мой комментарий. Не знаю, откуда взялось это знание :( Думал, я где-то это читал...
Может есть и хорошие ответы здесь
Для этого вы можете использовать коллекцию 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
. Вам придется искать сторонние библиотеки, чтобы выполнить то, что вы хотите, но я настоятельно рекомендую вам не использовать такую коллекцию, поскольку она нарушает несколько предположений принцип наименьшего удивления, когда пользователь, которому удобно работать с другими коллекциями, получает неожиданное поведение.
вы можете использовать внешние библиотеки, такие как
google guava
илиapache commons
, посмотрите stackoverflow.com/questions/6433478/…