3
让我们来看看例子不lambda表达式:的Java 8可选如何处理太多orElses
Credentials credentials = CredentialService.get(id);
if (credentials != null && credentials.isActive()) {
User user = UserService.get(credentials.getUserId());
if (user != null)
return Status.ok(user);
}
return Status.bad();
正如你所看到的,只有当用户不null
Status.ok()
将被退回。否则,将返回Status.bad()
。现在,随着lambda表达式(服务的方法现在返回Optional<T>
):
return CredentialService.get(id)
.filter(Credentials::isActive)
.map(credentials -> UserService.get(credentials.getUserId())
.map(Status::ok)
.orElse(Status.bad())
).orElse(Status.bad());
现在我要回到Status.bad()
两次(在实际的代码,约4-5)。这是一种将Status.bad()
返回一次的方法吗?
我没有关于这行代码的任何细节的更多信息。但也许只需要返回最后的'.orElse(Status.bad())'也许你可以考虑一下。 – smsnheck
@NicolasFilotto,'可选',所以'filter'存在。 @smsnheck,你说得对,它只取决于其余'orElse'中的'Optional'。它适用于'.orElse(Optional.empty())。orElse(null)'。这是一种让它不令人困惑的方法吗? –
Feeco
无论您是否使用可选或不可用,因为设计关闭,您的代码也可能看起来像垃圾。 Java 8的功能组件只是另一种编程方法,而不是神奇的仙尘。 – Kayaman