有可能把这个表达式压缩成一行吗



我有一个java函数,它根据对象的名称变量在数组列表中搜索对象

public Animal buscarAnimal(String animal){ 
for(Animal a: animais){
if(a.getNomeAnimal().equals(animal))return a;
}
return null;

我想知道是否可以使用foreach和lambdas,或者流,在一行中完成所有的比较和对象的返回。我试了一段时间,但我不是一个真正的专业人士,只得到了这么远的

animais.forEach((Animal a)->{if(a.getNomeAnimal().equals(animal)){return a;}});

然而,这给了我以下错误:

error: incompatible types: bad return type in lambda expression

使用Streamfilter,然后使用findFist。这将返回一个Optional<Animal>。如果您不想更改方法以返回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);

最新更新