RxJava2:onComplete不用flatMapIterable调用

这是简短的代码片段:

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()方法。

除非调用onComplete否则BehaviorSubject的形式是无限的。 因此, 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") } )