【问题标题】:Java 9 ifPresentOrElse returning valueJava 9 ifPresentOrElse 返回值
【发布时间】:2018-10-29 05:04:24
【问题描述】:

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/ 我尝试将其更改为“完整的 lambdas 代码”(不起作用):

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/如果是,如何?

【问题讨论】:

  • “不工作”到底是什么意思?请参阅How to Ask 文章以获取有关构建我们可以实际回答的问题的帮助:)
  • 从对ifPresentOrElse的调用中删除return调用,它应该可以工作。您可能必须使idname 有效地最终确定。

标签: java lambda optional java-9


【解决方案1】:

鉴于您的方法 updateStudentcreateStudent 涉及某种形式的副作用,并且您通常应该更喜欢无副作用的 lambda,我不建议您在这里使用它们。事实上,一个简单的 if-then-else 块就足够了。但是,如果您好奇,等效的 lambda 看起来像:

return studentOpt
    .map(unused -> updateStudent(id, name))
    .orElseGet(() -> createStudent(id, name));

【讨论】:

  • 完美答案@Ravindra
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
相关资源
最近更新 更多