Сделайте оригинальную Observable завершенной, когда завершится тот, что внутри flatMap - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть Observable, к которому я применяю оператор flatMap.Можно ли сделать этот оригинальный Observable завершенным после завершения второго?

Вот код.

Observable.never<Int>()
        .startWith(0)
        .doOnComplete { println("Completed") } // Not called.
        .flatMap { Observable.fromArray(1, 2, 3, 4, 5) /* Completes after 5 */ }
        .subscribe(::println)

Вывод:

1
2
3
4
5

Я пытаюсь добиться следующего вывода:

1
2
3
4
5
Completed

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете воспользоваться оператором materialize, который поможет вам получить информацию о том, что происходит внутри flatMap.Затем вы можете утилизировать апстрим при получении onComplete уведомления (принимая только onNext Уведомления).

    Observable.<Integer>never()
            .startWith(0)
            .flatMap(integer -> Observable.range(1, 5)
                    .materialize())
            .takeWhile(notification -> notification.isOnNext())
            .map(notification -> notification.getValue())
            .doOnComplete(() -> System.out.println("Completed"))
            .subscribe(integer -> System.out.println(integer));

Результат

1
2
3
4
5
Completed
...