0

这是一小段代码:

    val subject = BehaviorSubject.createDefault(emptyList<Int>())
    subject.onNext(Arrays.asList(1, 2, 3))
    subject.flatMapIterable { list: List<Int> -> list }
            .subscribeBy(
                    onNext = { l("on next", it) },
                    onComplete = { l("on complete") }
            )

为什么onComplete不在这里打电话?我应该怎么做才能处理这段代码?因为在原始代码中我不能使用.toList()方法。

4

1 回答 1

3

除非被调用,否则你所BehaviorSubject拥有的形式是无限的源泉。onComplete因此flatMapIterable不会完成,您的onComplete处理程序将永远不会被调用。

所以要么你完成BehaviorSubject

val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.flatMapIterable { list: List<Int> -> list }
       .subscribeBy(
                onNext = { l("on next", it) },
                onComplete = { l("on complete") }
       )

subject.onComplete() // <-----------------------------------------------------

或者你最多拿一件

val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.take(1) // <----------------------------------------------------------
       .flatMapIterable { list: List<Int> -> list }
       .subscribeBy(
                onNext = { l("on next", it) },
                onComplete = { l("on complete") }
       )
于 2017-10-05T21:26:58.930 回答