Теперь я перебираю некоторые 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
И когда я оценивал 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));
Источник: https://stackoverflow.com/questions/708 ... -exception