流过滤器 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);