Java 9 ifPresentOrElse 返回值
Java 9 ifPresentOrElse returning value
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/ 我尝试将其更改为 'full lambdas code'(不起作用):
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/ 我应该将其更改为完整的 lambda 吗?什么东西最干净?
2/ 如果是,如何?
鉴于您的方法 updateStudent
和 createStudent
涉及某种形式的副作用,您通常应该更喜欢无副作用的 lambda,我不建议您在这里使用它们。事实上,一个简单的 if-then-else 块就足够了。然而,如果你很好奇,等效的 lambda 看起来像:
return studentOpt
.map(unused -> updateStudent(id, name))
.orElseGet(() -> createStudent(id, name));
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/ 我尝试将其更改为 'full lambdas code'(不起作用):
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/ 我应该将其更改为完整的 lambda 吗?什么东西最干净?
2/ 如果是,如何?
鉴于您的方法 updateStudent
和 createStudent
涉及某种形式的副作用,您通常应该更喜欢无副作用的 lambda,我不建议您在这里使用它们。事实上,一个简单的 if-then-else 块就足够了。然而,如果你很好奇,等效的 lambda 看起来像:
return studentOpt
.map(unused -> updateStudent(id, name))
.orElseGet(() -> createStudent(id, name));