1 / Рабочий код:
public Student process (int id, name){
Optional<Student> studentOpt = myrepo.findById(id);
studentOpt.isPresent() {
return updateStudent(id, name);
} else {
return createStudent(id, name);
}
2 / Я пытаюсь изменить его на «полный лямбда-код» (не работает):
public Student process (int id, name){
Optional<Student> studentOpt = myrepo.findById(id);
return studentOpt.ifPresentOrElse(student-> return updateStudent(id, name), () -> return createStudent(id, name));
}
1 / следует ли мне изменить его на полную лямбду? что самое чистое?
2 / если да, то как?
Удалите вызовы return из вызова ifPresentOrElse, и он должен работать. Возможно, вам придется сделать id и name окончательными.




Учитывая, что ваши методы updateStudent и createStudent включают в себя некоторую форму побочного эффекта, и вы обычно должны предпочесть лямбда-выражения без побочных эффектов, я не рекомендую вам использовать их здесь. Фактически, простого блока if-then-else будет достаточно. Однако, если вам интересно, эквивалентная лямбда будет выглядеть так:
return studentOpt
.map(unused -> updateStudent(id, name))
.orElseGet(() -> createStudent(id, name));
А что именно означает "не работает"? Пожалуйста, прочтите статью Как спросить, чтобы узнать, как создать вопрос, на который мы действительно можем ответить :)