是否可以编写嵌入到Optional方法链中的代码:
Optional<Application> appOpt = this.applicationDao.findById(application.getCode());
Application app = appOpt.orElse(Application::new);
if (!appOpt.isPresent()) {
app.get().setUserCreation("user");
app.get().setTimestampCreation(new Date());
}
我想再次使用先前的appOpt
对象。我想将所有这些逻辑嵌入到Optional方法链中。
我想应该有另一种更优雅的方式来获得它。
我尝试使用ifPresent
,但是它返回void
,所以我无法链接orElse
方法:
appOpt.ifPresent(a -> {
a.setUserCreation("userCreation"));
app.setTimestampCreation(new Date());
})
.orElse(Application::new);
我希望我解释得很好。
有什么想法吗?
答案 0 :(得分:7)
再次查看原始代码后,如果Optional
为空,则逻辑似乎应该运行:
Application application = appOpt.orElseGet(() -> {
Application app = new Application();
app.setUserCreation("userCreation"));
app.setTimestampCreation(new Date());
return app;
});