流过滤器返回空 findFirst 获取异常

时间:2021-06-26 11:49:17

标签: java java-stream filtering

以下将抛出异常,如果 personList 为空或过滤结果为空:

Person b2cInwardAllocTxs = personList.stream()
   .filter(x -> x.getName().equalsIgnoreCase("Alvin"))
   .findFirst().get();

我收到以下错误:

Exception: java.util.NoSuchElementException: No value present

如何解决错误?

实际上,我只是希望它应该返回一个对象或 null

3 个答案:

答案 0 :(得分:4)

如果在空的 get 上调用

Optional,将抛出异常。相反,您可以使用 orElse 返回 null:

Person b2cInwardAllocTxs = 
    personList.stream()
              .filter(x -> x.getName().equalsIgnoreCase("Alvin"))
              .findFirst()
              .orElse(null);

答案 1 :(得分:3)

是的,如果没有这样的元素,Optional.get 会抛出 NoSuchElementExceptionorElse 允许在没有元素时使用默认替换。

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);