【问题标题】:RxJava introduced Single<T>. How do I convert an Observable<T> to a Single<T>?RxJava 引入了 Single<T>。如何将 Observable<T> 转换为 Single<T>?
【发布时间】:2016-08-06 07:00:36
【问题描述】:

RxJava 最近引入了Single。有没有办法在不修改原始 observable 源的情况下将已经存在的 Observable(几乎是 Single)转换为 Single?

例如,我有一个 api 服务类,它有一个返回 Observable 的方法——它本质上是从远程资源中获取用户。说我不能修改服务。我想在别处使用它,但返回一个 Single。我该怎么做?

多一点背景

RxJava 最近引入了 Single 的概念,它或多或少是一个对 Rx 友好的简单回调(即一个 Observable 发出一个对象或一个错误)(在此处阅读更多信息 - http://reactivex.io/documentation/single.html

【问题讨论】:

    标签: rx-java observable


    【解决方案1】:

    我认为另一个答案已经过时了。您可能应该检查以下方法。

    singleOrError: 如果源长于 1 项,则发出唯一的元素 IndexOutOfBoundsException,如果源为空,则发出 NoSuchElementException。

    firstOrError: 如果源为空,则发出第一​​个元素或 NoSuchElementException。

    lastOrError: 如果源为空,则发出最后一个元素或 NoSuchElementException。

    elementAtOrError: 发出第 index 个元素或 NoSuchElementException。

    此页面上的更多信息:https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0

    【讨论】:

      【解决方案2】:

      注意:这是针对 RxJava 1 的。请参阅下面/上面的 Rx2 其他答案 :)


      添加了 2 种新的便捷方法来完成这件事。

      toSingle() 将发出单个项目的 Observable 转换为发出该项目的 Single

      toObservable 将 Single 转换为 Observable,该 Observable 发出 Single 发出的项目,然后完成

      (来源:http://reactivex.io/documentation/single.html

      【讨论】:

      • 请注意,如果 single 没有项目,.toObservable() 不会使其返回 Observable.empty()。相反,它仍然会抛出 NoSuchElementException。因此,产生的 observable 与源是 Observable 开始时是不同的。
      【解决方案3】:

      rxjava2 中你可以使用Single.fromObservable()

      【讨论】:

        【解决方案4】:

        https://github.com/apollographql/apollo-android/blob/main/apollo-rx2-support/src/main/java/com/apollographql/apollo/rx2/RxJavaExtensions.kt

        ApolloClient 有一个扩展。

        rxQuery 给你 ObservablerxMutate 给你 Single

        看看别人。

        【讨论】:

          猜你喜欢
          • 2019-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-01
          • 2021-12-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多