Java 8 optional how to handle too many orelses
•
Java
Let's look at an example without Lambdas:
@H_ 502_ 8@
@H_ 502_ 8@
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();
As you can see, status is returned only if the user is not null ok(). Otherwise, status is returned bad(). Now use Lambdas (the service method returns optional < T >): @ h_ 502_ 8@
@H_ 502_ 8@
return CredentialService.get(id)
.filter(Credentials::isActive)
.map(credentials -> UserService.get(credentials.getUserId())
.map(Status::ok)
.orElse(Status.bad())
).orElse(Status.bad());
Now I have to return to status twice Bad () (in actual code, about 4-5) This is a return to status Bad () method@ H_ 502_ 8@
Solution
I can guess userservice:: get return. In this case, you'd better use flatmap:
@H_ 502_ 8@
@H_ 502_ 8@
CredentialService.get(id)
.filter(Credentials::isActive)
.flatMap(credentials -> UserService.get(credentials.getUserId())
.map(Status::ok)
.orElse(Status.bad())
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
