流过滤器返回 null findFirst 获取异常
Posted
技术标签:
【中文标题】流过滤器返回 null findFirst 获取异常【英文标题】:stream filter return null findFirst getting exception 【发布时间】:2021-09-09 12:01:49 【问题描述】:如果personList
为空或过滤结果为空,以下会抛出异常:
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> x.getName().equalsIgnoreCase("Alvin"))
.findFirst().get();
我收到以下错误:
Exception: java.util.NoSuchElementException: No value present
如何解决错误?
实际上,我只是希望它应该返回一个对象或null
。
【问题讨论】:
请提供所抛出异常的堆栈跟踪。在任何情况下,您都需要查看Optional
为您提供的选项(例如orElse
)
异常 java.util.NoSuchElementException: 不存在值
不要“期待”,而是阅读文档:docs.oracle.com/javase/8/docs/api/java/util/Optional.html#get--
【参考方案1】:
要解决您的问题,您可以使用.orElse(null)
。
如果存在则返回值,否则返回null
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> "Alvin".equalsIgnoreCase(x.getName()))
.findFirst()
.orElse(null);
【讨论】:
【参考方案2】:get
在空的Optional
上调用会抛出异常。相反,您可以使用orElse
返回null
:
Person b2cInwardAllocTxs =
personList.stream()
.filter(x -> x.getName().equalsIgnoreCase("Alvin"))
.findFirst()
.orElse(null);
【讨论】:
【参考方案3】:是的,Optional.get
抛出 NoSuchElementException
是不是没有这样的元素。 orElse
允许在没有元素的情况下使用默认替换。
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> x.getName()
.equalsIgnoreCase("Alvin")).findFirst().orElse(null);
【讨论】:
以上是关于流过滤器返回 null findFirst 获取异常的主要内容,如果未能解决你的问题,请参考以下文章
findFirst 不适用于 Prisma 上的 3 个过滤器
JAVA07_Stream流中FindFirst方法查找元素第一个
JAVA07_Stream流中FindFirst方法查找元素第一个
JAVA07_Stream流中FindFirst方法查找元素第一个