【问题标题】:How to bring object out of a for loop如何将对象带出for循环
【发布时间】:2020-05-31 21:00:39
【问题描述】:

如果其名称属性与输入字符串匹配,我有以下方法应该返回一个 product 对象。

public Product find(String nameInput){  
 for(Product product : this.Products){           
        if(product.getName().equalsIgnoreCase(nameInput)){
            return product;                        
        }     
   }
}

它给了我以下错误:

我知道我可以在方法结束时返回 null,但是有没有更优雅的方法来做到这一点?

【问题讨论】:

  • 有流使循环变成一行,但你仍然需要决定是返回null还是抛出异常。

标签: java object for-loop return


【解决方案1】:

您可以使用streamfindFirst 返回Optional 与第一个匹配Product 或空Optional

this.Products.stream()
             .filter(p->p.getName().equalsIgnoreCase(nameInput))
             .findFirst();

您也可以在Optional 上使用orElse 方法返回默认值

【讨论】:

【解决方案2】:

你可以这样做:

public Optional<Product> find(String nameInput){  
 for(Product product : this.Products){           
        if(product.getName().equalsIgnoreCase(nameInput)){
            return Optional.of(product)                        
        }     
   }
    return Optional.empty();
}

或者,更好的是,将 ForEach 循环替换为 Stream。

然后你可以使用 ifPresent

  find("Stackoverflow").ifPresent(consumer)

【讨论】:

    【解决方案3】:

    按如下方式进行:

    public Product find(String nameInput){  
        Product p = null;
        for(Product product : this.Products){           
            if(product.getName().equalsIgnoreCase(nameInput)){
                p = product;
                break;                        
            }     
        }
        return p;
    }
    

    【讨论】:

      【解决方案4】:

      从 Java 8 开始,您可以返回 Optional 而不是 Product:

      public Optional<Product> find(String nameInput){  
        for(Product product : this.Products){           
          if(product.getName().equalsIgnoreCase(nameInput)){
              return Optional.of(product);                        
          }     
        }
        return Optional.empty();
      }
      

      此外,正如其他几位海报也提到的那样,我将使用流 api 而不是 for each 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-18
        • 1970-01-01
        • 1970-01-01
        • 2022-11-25
        • 1970-01-01
        • 2018-05-19
        • 2011-01-23
        相关资源
        最近更新 更多