Java 8可选如何处理太多orElses
发布时间:2020-12-15 04:36:39 所属栏目:Java 来源:网络整理
导读:让我们看一下没有lambdas的例子: Credentials credentials = CredentialService.get(id);if (credentials != null credentials.isActive()) { User user = UserService.get(credentials.getUserId()); if (user != null) return Status.ok(user);}return St
让我们看一下没有lambdas的例子:
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().现在使用lambdas(Service的方法现在返回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在这种情况下你最好使用flatMap:
CredentialService.get(id) .filter(Credentials::isActive) .flatMap(credentials -> UserService.get(credentials.getUserId()) .map(Status::ok) .orElse(Status.bad()) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |