如何在 RxAndroid 中将 Observable 映射到 Single?

How can I map Observable to Single in RxAndroid?

我有Observable<State> state 和这段代码`

Flowable<.> loadData(){
return state.toFlowable(Latest).flatmap(this::fetchData()) }`

其中 fetchData() return Flowable

但是如果我们有 fetchData()Single return 类型怎么办 和 loadData() return 单<.>

如何将 Observable 映射到 Single?

您可以使用 .take(1) 获取第一个项目并使用以下方法转换为单个项目:

  • .single(defaultItem)
  • .singleElement()
  • .singleOrError()

这是一个可行的解决方案:

 loadDataSingle()
            .subscribeBy(
                    onSuccess = { println("This is your single data $it") },
                    onError = { println("We have a problem") }
            )


fun loadDataSingle(): Single<String> {
    return getState().singleOrError()
            .flatMap {
                fetchDataSingle()
            }
}

fun fetchDataSingle(): Single<String> {
    return Single.just("This is fetching your single data")
}

或者您可以这样做Single.fromObservable并将调用包装在其中

   fun loadDataSingle(): Single<String> {
    return Single.fromObservable(getState())
            .flatMap { fetchDataSingle() }

   }