1/ Working code:
public Student process (int id, name){
Optional studentOpt = myrepo.findById(id);
studentOpt.isPresent() {
return updateStudent(id, name);
} else {
return createStudent(id, name);
}
2/ I try to change it to 'full lambdas code' (not working):
public Student process (int id, name){
Optional studentOpt = myrepo.findById(id);
return studentOpt.ifPresentOrElse(student-> return updateStudent(id, name), () -> return createStudent(id, name));
}
1/ should I change it to full lambda? what is the cleanest?
2/ if yes, how ?
解决方案
Given that your methods updateStudent and createStudent involve some form of side effect and you should generally prefer side effect free lambdas, I don't recommend you to use them here. In fact, a simple if-then-else block would be suffice. However, if you are curious of knowing how the equivalent lambda would look like, assuming there were no side effects, here it is.
return studentOpt
.map(unused -> updateStudent(id, name))
.orElseGet(() -> createStudent(id, name));