Java 如何使对象脱离for循环
我有以下方法,如果对象的name属性与输入字符串匹配,则该方法应返回product对象Java 如何使对象脱离for循环,java,object,for-loop,return,Java,Object,For Loop,Return,我有以下方法,如果对象的name属性与输入字符串匹配,则该方法应返回product对象 public Product find(String nameInput){ for(Product product : this.Products){ if(product.getName().equalsIgnoreCase(nameInput)){ return product;
public Product find(String nameInput){
for(Product product : this.Products){
if(product.getName().equalsIgnoreCase(nameInput)){
return product;
}
}
}
这给了我以下错误:
我知道我可以在方法的末尾返回null,但是有没有更优雅的方法呢?您可以使用并返回可选的,首先匹配产品
或空的可选的
this.Products.stream()
.filter(p->p.getName().equalsIgnoreCase(nameInput))
.findFirst();
您还可以使用可选
上的方法返回默认值您可以执行以下操作:
public Optional<Product> find(String nameInput){
for(Product product : this.Products){
if(product.getName().equalsIgnoreCase(nameInput)){
return Optional.of(product)
}
}
return Optional.empty();
}
由于Java 8,您可以返回可选的而不是产品:
public Optional<Product> find(String nameInput){
for(Product product : this.Products){
if(product.getName().equalsIgnoreCase(nameInput)){
return Optional.of(product);
}
}
return Optional.empty();
}
public可选查找(字符串名称输入){
对于(产品:this.Products){
if(product.getName().equalsIgnoreCase(nameInput)){
(产品)退货可选;
}
}
返回可选的.empty();
}
此外,正如其他几张海报也提到的,我将使用流api而不是for each循环 按以下步骤操作:
public Product find(String nameInput){
Product p = null;
for(Product product : this.Products){
if(product.getName().equalsIgnoreCase(nameInput)){
p = product;
break;
}
}
return p;
}
有一些流将循环设为一行,但您仍然需要决定是返回null还是引发异常。它如何返回产品对象?请参阅此文档findFirst
是短路终端操作,并返回可选@InitialisingAttributes
public Product find(String nameInput){
Product p = null;
for(Product product : this.Products){
if(product.getName().equalsIgnoreCase(nameInput)){
p = product;
break;
}
}
return p;
}