首页 > 解决方案 > java 可选:如果做某事模式

问题描述

是否能够将此代码嵌入到 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对象。我想将所有这些逻辑嵌入到可选方法链中。

我想应该有另一种更优雅的方式来获得它。

我试过玩,ifPresent但它会返回void,所以我无法链接orElse方法:

appOpt.ifPresent(a -> {
    a.setUserCreation("userCreation"));
    app.setTimestampCreation(new Date());
})
.orElse(Application::new);

我希望我已经解释得很好。

有任何想法吗?

标签: javaoptional

解决方案


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

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

推荐阅读