我有这个代码
service.confirm(identity, id)
.map(confirmationResponse -> InternalToExternalResponse.mapToExternal(confirmationResponse))
.map(externalResponse->uriBuilder.buildAuthorizeUri(externalResponse))
.lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));
现在我需要扩展uriBuilder.buildAuthorizeUri(externalResponse)
以将confirmationResponse
作为第二个参数
我可以在第二个lambda表达式中使用第一个lambda表达式中的confirmationResponse
吗?最终代码应类似于
service.confirm(identity, id)
.map(confirmationResponse -> InternalToExternalResponse.mapToExternal(confirmationResponse))
.map(externalResponse-**>uriBuilder.buildAuthorizeUri(externalResponse,confirmationResponse ))**
.lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));
答案 0 :(得分:4)
您可以组合两个lambda表达式:
service.confirm(identity, id)
.map(confirmationResponse -> {
ExternalResponse externalResponse = InternalToExternalResponse.mapToExternal(confirmationResponse);
return uriBuilder.buildAuthorizeUri(externalResponse,confirmationResponse);})
.lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));
尽管如此,我建议使用较短的lambda变量名称:
service.confirm(identity, id)
.map(cr -> {
ExternalResponse er = InternalToExternalResponse.mapToExternal(cr);
return uriBuilder.buildAuthorizeUri(er,cr);})
.lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));
答案 1 :(得分:4)
为什么不合并为一个lambda?
@EmbeddedId
答案 2 :(得分:1)
作为此结果,您可以将confirmationResponse
传递给下一个lambda。由于两者都需要,因此可以创建自定义对象,也可以像这样使用Pair
:
service.confirm(identity, id)
.map(confirmationResponse -> new Pair<ConfirmationResponse, ExternalResponse>(confirmationResponse, InternalToExternalResponse.mapToExternal(confirmationResponse)))
.map(result ->u riBuilder.buildAuthorizeUri(result.second, result.first ))
.lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));
答案 3 :(得分:1)
否,您不能在第二个lambda中使用confirmationResponse
。那会破坏功能模式。
不过,您可以将其包括在第一个lambda的结果中。只需为自己创建一个Pair
之类的实用程序类:
service.confirm(identity, id)
.map(confirmationResponse -> Pair.of(
InternalToExternalResponse.mapToExternal(confirmationResponse),
confirmationResponse))
.map(p -> uriBuilder.buildAuthorizeUri(p.getFirst(), p.getSecond())
...
我不确定,如果这是好风格。