у меня есть эта функция 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
Используйте Stream
и filter
, затем 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);
Хороший ответ с отличным объяснением!