>

이 코드가 있습니다

service.confirm(identity, id)
                .map(confirmationResponse -> InternalToExternalResponse.mapToExternal(confirmationResponse))
                .map(externalResponse->uriBuilder.buildAuthorizeUri(externalResponse))
                .lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));

이제 uriBuilder.buildAuthorizeUri(externalResponse) 를 확장해야합니다   confirmationResponse 를 가지고  두 번째 매개 변수로

confirmationResponse 를 사용할 수 있습니까   두 번째 람다 식의 첫 번째 람다 식에서? 마지막 코드는

service.confirm(identity, id)
                .map(confirmationResponse -> InternalToExternalResponse.mapToExternal(confirmationResponse))
                .map(externalResponse-**>uriBuilder.buildAuthorizeUri(externalResponse,confirmationResponse ))**
                .lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));


  • 답변 # 1

    당신은 confirmationResponse 를 전달할 수 있습니다  이것의 결과로 다음 람다에. 둘 다 필요하므로 사용자 정의 오브젝트를 작성하거나 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));
    
    

  • 답변 # 2

    두 가지 람다 식을 결합 할 수 있습니다 :

    service.confirm(identity, id)
                    .map(confirmationResponse -> {
                        ExternalResponse externalResponse = InternalToExternalResponse.mapToExternal(confirmationResponse);
                        return uriBuilder.buildAuthorizeUri(externalResponse,confirmationResponse);})
                    .lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));
    
    

    짧은 람다 변수 이름을 사용하는 것이 좋습니다.

    service.confirm(identity, id)
                    .map(cr -> {
                        ExternalResponse er = InternalToExternalResponse.mapToExternal(cr);
                        return uriBuilder.buildAuthorizeUri(er,cr);})
                    .lift(auditOperatorFactory.logRequestURI(identity, AuditCategory.BOOKKEEP));
    
    

  • 답변 # 3

    단일 람다로 병합하지 않는 이유는 무엇입니까?

    service.confirm(identity, id)
           .map(confirmationResponse -> uriBuilder.buildAuthorizeUri(InternalToExternalResponse.mapToExternal(confirmationResponse), confirmationResponse))
           .lift(...)
    
    

  • 답변 # 4

    아니요, confirmationResponse 를 사용할 수 없습니다  두 번째 람다에서. 기능 패턴을 깨뜨릴 수 있습니다.

    그러나 첫 번째 람다 결과에 포함시킬 수 있습니다. Pair 와 같은 유틸리티 클래스를 직접 만드십시오. :

    service.confirm(identity, id)
           .map(confirmationResponse -> Pair.of(
               InternalToExternalResponse.mapToExternal(confirmationResponse), 
               confirmationResponse))
           .map(p -> uriBuilder.buildAuthorizeUri(p.getFirst(), p.getSecond())
           ...
    
    

    여기서 좋은 스타일인지 확실하지 않습니다.

관련 자료

  • 이전 javascript - 직렬화 된 문자열에서 이스케이프 된 # 기호
  • 다음 javascript - cytoscapejs를 사용하여 특정 레이아웃에서 그래프 노드의 하위 집합 만 정렬