Вызов метода в объекте предыдущего оператора в лямбда-выражении

#lambda #java-8 #stream #rx-java

#лямбда #java-8 #поток #rx-java

Вопрос:

У меня есть фрагмент кода

 client.confirmPayment(identity, entity.getId())
                .map(response -> response.id)
                .flatMap(itemId -> signingService.orderSigning(itemId, identity))
                .doOnSuccess(signatureOrder->signatureOrder.setRedirectUrl("XXXX"));
  

client.confirmPayment метод возвращает поток типа Response

 class Response{
    private String id;
    private String url;
}
  

Есть ли какой-либо способ вызвать response.url из doOnSuccess оператора?

Комментарии:

1. Просто идея, которую можно развить на основе — map это в SimpleEntry of Id, Response … используйте идентификатор как текущий и Response используйте позже.

Ответ №1:

Это будет что-то вроде этого:

 Single<Response> responseSingle = client.confirmPayment(identity, entity.getId())
    .flatMap(response -> Single.just(response)
        .flatMap(r -> signingService.orderSigning(r.id, identity))
        .doOnSuccess(order -> order.setRedirectUrl(response.url))
    );