java可选:如果执行某种模式

时间:2019-01-15 10:20:35

标签: java optional

是否可以编写嵌入到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);

我希望我解释得很好。

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

再次查看原始代码后,如果Optional为空,则逻辑似乎应该运行:

Application application = appOpt.orElseGet(() -> {
    Application app = new Application();
    app.setUserCreation("userCreation"));
    app.setTimestampCreation(new Date());
    return app;
});