我有List<Long> countriesList,它包含Long值,这些值是国家ids。
现在,我正在使用List<UserRequests>迭代一些streams列表。
userRequests.stream().
forEach(userRequest->
{
UserData=userRepository.findById(userRequest.getId()); //fine
if (CollectionUtils.isNotEmpty(countriesList) && countriesList.contains(userRequest.getCountryId()))//getting NPE here
{
//do some operation
}
});我试图通过评估单个语句来进行调试。我已经确定countriesList有一些数据,第一部分,CollectionUtils.isNotEmpty(countriesList)正在返回true。userRequest也不是null,但是userRequest.getCountryId()是null。当我评估countriesList.contains(userRequest.getCountryId())时,我得到的是Null pointer exception。为什么不是false?我搞不懂我做错了什么。默认的list.contains(null)行为仅仅是这样还是因为我在stream()中调用它
为了简化起见,我创建了简单列表,并与null进行了比较。
class Test {
public static void main(String[] args) {
List<Long> 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<Long> longList = new ArrayList<>();
longList.add(1L);
System.out.println("Comparing long list with null::" + longList.contains(null));为什么要打印false?为什么这里没有NullPointerException?
发布于 2022-01-24 19:14:45
来自java.util.List的API文档
一些list实现对它们可能包含的元素有限制。例如,一些实现禁止空元素,而有些实现对其元素的类型有限制。试图添加不合格的元素会引发未经检查的异常,通常为NullPointerException或ClassCastException。试图查询不合格元素的存在可能会引发异常,或者只返回false;一些实现将显示前一种行为,而另一些则会显示后者。更普遍的情况是,尝试对不合格元素的操作(其完成不会导致将不合格元素插入列表)可能会抛出异常,或者在实现选项时成功。此类异常在此接口规范中标记为“可选”。布尔包含(对象o) 如果此列表包含指定的元素,则返回
true。更正式地说,返回true的当且仅当这个列表包含至少一个元素e,使得Objects.equals(o,e)。 具体如下: 包含在接口集合中 参数: 元素,其在此列表中的存在将被测试。 返回: 如果此列表包含指定的元素,则为true。 抛出: ClassCastException -如果指定元素的类型与此列表不兼容(可选) NullPointerException -如果指定的元素为空且此列表不允许空元素(可选)
您的countriesList似乎是一种列表类型,它不接受null元素,例如List.of或List.copyOf生成的元素
https://stackoverflow.com/questions/70838768
复制相似问题