【问题标题】:stream filter return null findFirst getting exception流过滤器返回 null findFirst 获取异常
【发布时间】: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

【问题讨论】:

标签: java java-stream filtering


【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-10
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 2021-11-18
        • 2020-08-23
        • 1970-01-01
        相关资源
        最近更新 更多