以下将抛出异常,如果 personList
为空或过滤结果为空:
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> x.getName().equalsIgnoreCase("Alvin"))
.findFirst().get();
我收到以下错误:
Exception: java.util.NoSuchElementException: No value present
如何解决错误?
实际上,我只是希望它应该返回一个对象或 null
。
答案 0 :(得分:4)
get
上调用 Optional
,将抛出异常。相反,您可以使用 orElse
返回 null
:
Person b2cInwardAllocTxs =
personList.stream()
.filter(x -> x.getName().equalsIgnoreCase("Alvin"))
.findFirst()
.orElse(null);
答案 1 :(得分:3)
是的,如果没有这样的元素,Optional.get
会抛出 NoSuchElementException
。 orElse
允许在没有元素时使用默认替换。
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> x.getName()
.equalsIgnoreCase("Alvin")).findFirst().orElse(null);
答案 2 :(得分:3)
要解决您的问题,您可以使用 .orElse(null)
。
如果存在则返回值,否则返回null
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> "Alvin".equalsIgnoreCase(x.getName()))
.findFirst()
.orElse(null);