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

39
RxJava最近引入了Single。有没有一种方法可以将已经存在的Observable(几乎就是Single)转换为Single,而不修改原始observable的源代码?
例如,我有一个api服务类,其中包含一个返回Observable的方法,该方法基本上是从远程资源获取用户。假设我无法修改服务。我想在其他地方使用它,但要返回Single。我该怎么做? 更多背景信息 RxJava最近引入了Single的概念,这更或多或少是Rx友好的简单回调(即发出一个对象或错误的Observable)(在此处阅读更多信息 - http://reactivex.io/documentation/single.html
4个回答

41

我认为另一个答案已经过时了, 你应该检查以下方法.

singleOrError: 发出唯一的元素, 如果源包含多于一个item则抛出IndexOutOfBoundsException异常, 如果源为空则抛出NoSuchElementException异常.

firstOrError: 发出第一个元素, 如果源为空则抛出NoSuchElementException异常.

lastOrError: 发出最后一个元素, 如果源为空则抛出NoSuchElementException异常.

elementAtOrError: 发出索引为index的元素或NoSuchElementException异常.

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


34

注意: 此处针对RxJava 1。请参考以下/以上的答案获取Rx2的相关信息 :)


新增了两个便利方法来实现此功能。

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

toObservable将Single转换为发射Single发出的项并随后完成的Observable

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


4
请注意,如果单个项为空,调用.toObservable()将不会使其返回Observable.empty()。相反,它仍然会抛出NoSuchElementException异常。因此,生成的Observable与源始为Observable时不是同一件事。 - eis

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接