是否可以将此表达式压缩为一行?
Is it possible to compress this expression to one line?
我有这个 java 函数,它根据对象的名称变量在数组列表中搜索对象
public Animal buscarAnimal(String animal){
for(Animal a: animais){
if(a.getNomeAnimal().equals(animal))return a;
}
return null;
我想知道是否可以使用 foreach 和 lambda 或流,在一行中完成所有比较和对象的返回。
我尝试了一段时间,但我不是真正的专业人士,只做到了这一点
animais.forEach((Animal a)->{if(a.getNomeAnimal().equals(animal)){return a;}});
然而,这给了我以下错误:
error: incompatible types: bad return type in lambda expression
使用 Stream
和 filter
然后 findFist
。这 return 是 Optional<Animal>
。如果您不想将方法更改为 return 和 Optional<Animal>
(推荐),请使用 orElse(null)
获得原始行为。
return
animais.stream().filter(a -> a.getNomeAnimal().equals(animal))
.findFirst()
.orElse(null);
一行:
return animais.stream().filter(a -> a.getNomeAnimal().equals(animal)).findFirst().orElse(null);
我有这个 java 函数,它根据对象的名称变量在数组列表中搜索对象
public Animal buscarAnimal(String animal){
for(Animal a: animais){
if(a.getNomeAnimal().equals(animal))return a;
}
return null;
我想知道是否可以使用 foreach 和 lambda 或流,在一行中完成所有比较和对象的返回。 我尝试了一段时间,但我不是真正的专业人士,只做到了这一点
animais.forEach((Animal a)->{if(a.getNomeAnimal().equals(animal)){return a;}});
然而,这给了我以下错误:
error: incompatible types: bad return type in lambda expression
使用 Stream
和 filter
然后 findFist
。这 return 是 Optional<Animal>
。如果您不想将方法更改为 return 和 Optional<Animal>
(推荐),请使用 orElse(null)
获得原始行为。
return
animais.stream().filter(a -> a.getNomeAnimal().equals(animal))
.findFirst()
.orElse(null);
一行:
return animais.stream().filter(a -> a.getNomeAnimal().equals(animal)).findFirst().orElse(null);