java可选:if do something模式
是否能够将此代码嵌入可选方法链中:java可选:if do something模式,java,optional,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().setTimest
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());
}
我希望我解释得这么好
有什么想法吗?再次查看原始代码后,如果可选项为空,则逻辑似乎应该运行:
Application application = appOpt.orElseGet(() -> {
Application app = new Application();
app.setUserCreation("userCreation"));
app.setTimestampCreation(new Date());
return app;
});
再次查看原始代码后,如果可选项为空,则逻辑应该运行:
Application application = appOpt.orElseGet(() -> {
Application app = new Application();
app.setUserCreation("userCreation"));
app.setTimestampCreation(new Date());
return app;
});
app.get似乎是一个错误,毕竟它不是可选的。开始时的代码与您建议的代码有很大不同,为什么一次应用,然后是一个?假设两者都是a。不过,如果不是从数据库加载,则配置新应用程序对象的一般思路有一个非常简单的解决方案:只需在orElse中进行配置,而不是将其拆分,然后需要进行额外的检查。从DDD PoV中,我希望它无论如何都在构造函数中,但您当然可以使用lambda。除了@Voo的注释外,appOpt.ifPresent与if相反!appOpt.isPresent.app.get似乎是一个错误,毕竟它不是可选的。开始时的代码与您建议的代码有很大不同,为什么一次应用,然后是一个?假设两者都是a。不过,如果不是从数据库加载,则配置新应用程序对象的一般思路有一个非常简单的解决方案:只需在orElse中进行配置,而不是将其拆分,然后需要进行额外的检查。从DDD PoV中,我希望它无论如何都在构造函数中,但您当然可以使用lambda。除了@Voo的注释外,appOpt.ifPresent与if相反!表示同意。