作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用此逻辑并尝试在未找到员工时返回 new Employee()
。
但是,当 request.getId()
为 null
时,它会抛出异常,我正在等待它执行 orElse()
部分.然而,事实并非如此。那么,我应该使用另一种可选方法吗? orElseGet()
还是 ifPresentOrElse()
?
我怎样才能巧妙地解决这个问题?
Employee employee = employeeRepository.findById(request.getId())
.orElse(new Employee());
更新: 如果使用 Optional
不是一个好主意,我考虑使用以下方法:
Employee employee = new Employee();
if (id != null) {
employee = employeeRepository.findById(id)
.orElse(new Employee());
}
有什么想法吗?
最佳答案
如评论中所述,Optional
在这种情况下不执行任何操作。要解决它,您需要自己处理 null
值。您可以通过让 request.getId()
自己返回一个 Optional
来做到这一点(因为它可以是 null
)。
现在您可以使用 flatMap()
运算符链接这些 Optional
。
public class MyRequestClass {
private Long id;
// Change your getter to this, or make a new one, eg. 'getOptionalId()'
public Optional<Long> getId() {
return Optional.ofNullable(id);
}
}
现在您可以将代码重构为:
Employee employee = request
.getId()
.flatMap(employeeRepository::findById) // Using flatMap() in stead of map()
.orElseGet(Employee::new); // I changed this part so that new Employee() is
// called lazily when no Employee was found in
// the database (or when the request has no ID)
关于java - 发生异常时,可选的 orElse() 无法返回替代值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72626469/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!