Почему list.contains(null) выдает исключение нулевого указателя?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему list.contains(null) выдает исключение нулевого указателя?

Сообщение Anonymous »

У меня есть ListcountriesList, который содержит значения Long, которые являются идентификаторами стран.
Теперь я перебираю некоторые List список с использованием потоков.

Код: Выделить всё

userRequests.stream().
forEach(userRequest->
{
UserData=userRepository.findById(userRequest.getId()); //fine
if (CollectionUtils.isNotEmpty(countriesList) && countriesList.contains(userRequest.getCountryId()))//getting NPE here
{
//do some operation
}
});
Я пытался выполнить отладку, оценивая отдельные операторы.
Я убедился, что в списке стран есть некоторые данные
Первая часть CollectionUtils.isNotEmpty(countriesList) возвращает true.

Код: Выделить всё

userRequest
также не имеет значения null, но userRequest.getCountryId() имеет значение null.
И когда я оценивал CountryList.contains(userRequest.getCountryId()), я получаю исключение нулевого указателя здесь. почему не false?
Я не понимаю, что я делаю неправильно.
Поведение list.contains(null) по умолчанию такое, или это потому, что я его вызываю внутри потока()?
Для упрощения я создал простой список и сравнил его с нулевым.

Код: Выделить всё

class Test {
public static void main(String[] args) {
List longList = List.of(1L, 2L, 3L);
System.out.println("Comparing long list with null::" + longList.contains(null));
}
}
Это исключение, которое я получаю:

Код: Выделить всё

Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:222)
at java.base/java.util.ImmutableCollections$AbstractImmutableList.indexOf(ImmutableCollections.java:166)
at java.base/java.util.ImmutableCollections$AbstractImmutableList.contains(ImmutableCollections.java:197)
at com.test.Test.main(Test.java:26)
Но если я это сделаю:

Код: Выделить всё

    List longList = new ArrayList();
longList.add(1L);
System.out.println("Comparing long list with null::" + longList.contains(null));
Почему выводится ложное сообщение? Почему здесь нет NullPointerException?

Подробнее здесь: https://stackoverflow.com/questions/708 ... -exception
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»