gpt4 book ai didi

Java 8 Optional 如何处理太多 orElses

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:22:27 25 4
gpt4 key购买 nike

让我们看一下没有 lambda 的例子:

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();

如您所见,Status.ok()仅当用户不是 null 时才会返回.否则,Status.bad()将被退回。现在使用 lambdas(服务的方法现在返回 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()一次?

最佳答案

我猜 UserService::get return Optional 在这种情况下你最好使用 flatMap:

CredentialService.get(id)
.filter(Credentials::isActive)
.flatMap(credentials -> UserService.get(credentials.getUserId())
.map(Status::ok)
.orElse(Status.bad())

关于Java 8 Optional 如何处理太多 orElses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40484060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com