流过滤器 return null findFirst 获取异常
stream filter return null findFirst getting exception
下面会抛出异常,如果personList
为空或者过滤后的结果为空:
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> x.getName().equalsIgnoreCase("Alvin"))
.findFirst().get();
我收到以下错误:
Exception: java.util.NoSuchElementException: No value present
如何解决错误?
实际上,我只是希望它应该 return 一个对象或 null
。
是的,Optional.get
抛出 NoSuchElementException
是没有这样的元素。 orElse
允许在没有元素的情况下使用默认替换。
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> x.getName()
.equalsIgnoreCase("Alvin")).findFirst().orElse(null);
如果在空 Optional
上调用,get
将抛出异常。相反,您可以使用 orElse
到 return a null
:
Person b2cInwardAllocTxs =
personList.stream()
.filter(x -> x.getName().equalsIgnoreCase("Alvin"))
.findFirst()
.orElse(null);
要解决您的问题,您可以使用.orElse(null)
。
它将 return 值(如果存在),否则 return null
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> "Alvin".equalsIgnoreCase(x.getName()))
.findFirst()
.orElse(null);
下面会抛出异常,如果personList
为空或者过滤后的结果为空:
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> x.getName().equalsIgnoreCase("Alvin"))
.findFirst().get();
我收到以下错误:
Exception: java.util.NoSuchElementException: No value present
如何解决错误?
实际上,我只是希望它应该 return 一个对象或 null
。
是的,Optional.get
抛出 NoSuchElementException
是没有这样的元素。 orElse
允许在没有元素的情况下使用默认替换。
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> x.getName()
.equalsIgnoreCase("Alvin")).findFirst().orElse(null);
Optional
上调用,get
将抛出异常。相反,您可以使用 orElse
到 return a null
:
Person b2cInwardAllocTxs =
personList.stream()
.filter(x -> x.getName().equalsIgnoreCase("Alvin"))
.findFirst()
.orElse(null);
要解决您的问题,您可以使用.orElse(null)
。
它将 return 值(如果存在),否则 return null
Person b2cInwardAllocTxs = personList.stream()
.filter(x -> "Alvin".equalsIgnoreCase(x.getName()))
.findFirst()
.orElse(null);