flatMap内部的一个完成时,使原始Observable完整

时间:2019-02-07 19:21:20

标签: kotlin rx-java2

我有一个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 :(得分:1)

您可以使用运算符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