Mono <Mono <Object>> как подписаться - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь создать следующую цепочку:

Mono<Object1> oneMono = Mono.just("1");
Mono<Object2> twoMono = Mono.just("2");

Mono<Mono<Object5>> resultMono = Mono.zip(oneMono, twoMono, (one, two) -> { 

    Mono<Object3> threeMono = Mono.just("3");
    Mono<Object4> fourMono = Mono.just("4");

    return Mono.zip(threeMono, fourMono, (three, four) -> {
        return "5";
    }
}) // get just Mono<Object5> here?

resultMono.subscribe(mono -> { 
    mono.subscribe();  // ugly double subscribe() !!
});

В результате мне нужно получить 5. Но перед выполнением 1, 2 и 3, 4.

Код работает нормально, но я бы хотел выйти

из Mono<Mono<Object5>> и double subscribe

до Mono<Object5> и single subscribe.

есть ли аналог flatMap для Zip?

1 Ответ

0 голосов
/ 08 мая 2018

Ну, у вас уже есть. Вам просто нужно использовать flatMap:

Mono<String> oneMono = Mono.just("1");
Mono<String> twoMono = Mono.just("2");

Mono.zip(oneMono, twoMono, (one, two) -> {
    Mono<String> threeMono = Mono.just("3");
    Mono<String> fourMono = Mono.just("4");

    return Mono.zip(threeMono, fourMono, (three, four) -> {
        return "5";
    });
})
.flatMap(stringMono -> stringMono)
.doOnNext(System.out::println)
.subscribe();
...