RxJava - 将列表的结果映射到另一个列表

Cem*_*Cem 2 android kotlin rx-java rx-java2

我想将列表中的每个对象都转换为另一个对象。但是这样做我的代码卡在将它们转换回 List

override fun myFunction(): LiveData<MutableList<MyModel>> {
    return mySdk
            .getAllElements() // Returns Flowable<List<CustomObject>>
            .flatMap { Flowable.fromIterable(it) }
            .map {MyModel(it.name!!, it.phoneNumber!!) }
            .toList() //Debugger does not enter here
            .toFlowable()
            .onErrorReturn { Collections.emptyList() }
            .subscribeOn(Schedulers.io())
            .to { LiveDataReactiveStreams.fromPublisher(it) }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到映射。但调试器甚至不会停留在 toList 或 toList 之下的任何其他地方。我该如何解决这个问题?

tyn*_*ynn 5

使用flatMap()您只会将Flowableof 列表展平为单个Flowable元素。调用toList()它需要Flowable完成,因此您很可能永远不会到达那里。如果您只想映射列表中的元素并发出一个带有新列表的项目,您应该在其中进行映射,flatMap()或者尝试使用concatMap()以保持顺序:

...
.concatMapSingle { list ->
    Observable.fromIterable(list).map {
        MyModel(it.name!!, it.phoneNumber!!)
    }.toList()
}
...
Run Code Online (Sandbox Code Playgroud)