RxJava引入了Single<T>。如何将 Observable<T> 转换为 Single<T>?

RxJava introduced Single<T>. How do I convert an Observable<T> to a Single<T>?

RxJava 最近推出 Single。有没有一种方法可以在不修改原始 Observable 源的情况下将已经存在的 Observable(几乎是 Single)转换为 Single?

例如,我有一个 api 服务 class,其方法 return 是一个 Observable - 这实际上是从远程资源中获取用户。说我不能修改服务。我想在别处消费这个,但 return 单身。我该怎么做?

多捏一点背景

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

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


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

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

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

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

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

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

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

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

lastOrError: 如果源为空,则发出 lastelement 或 NoSuchElementException。

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

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

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

ApolloClient 有一个扩展。

rxQuery 给你 Observable rxMutate 给你 Single

看看其他人。