Observable#single()和Observable#toSingle()之间的区别?

时间:2017-11-29 21:25:12

标签: java rx-java system.reactive reactive

我偶然发现了这些方法,从我从文档中获得的方法,他们做的几乎完全相同。看看代码,他们显然做了不同的事情。从初学者single()返回Observable(为什么?),而toSingle()有效返回Single

我对被动世界的了解有限,让我感到疑惑,为什么这两种方法都存在?他们有什么不同?他们中的任何人应该使用另一个吗?

他们中的任何一个或两个immediately会将Observable转换为Single,如果它没有发出任何项目,它会抛出错误吗?或者他们是否等待事件发出?

令我困惑的另一件事是他们的大理石图是不同的 (toSinglesingle),但他们的文档说他们应该表现得完全一样,特别是它们的行为应该像single()大理石图。

以下是文档: Observable#toSingle Observable#single

2 个答案:

答案 0 :(得分:3)

  

为什么这两种方法都存在?

single()是原始ReactiveX运算符集的一部分。稍后在toSingle()引入RxJava时添加了Single

  

他们有什么不同?

他们返回不同的基础反应类。 single()停留ObservabletoSingle()转换为Single

  

他们是否应该使用另一个?

取决于您要使用的类型以及您是否计划很快转移到RxJava 2.x.在RxJava 2中,没有toSingle和(大多数)运算符现在返回更合适的类型:single(T)singleOrError()singleElement()

  

他们的大理石图是不同的

toSingle大理石没有错误情况,Single类型的时间图表示事件随时间变化的惯例略有不同{{1 }}

答案 1 :(得分:0)

我相信两者都是相同的,两者都会在上游完成时生成1个项目,如果提供了多个项目(如文档所述),两者都会产生错误,因此使用它们的安全方式是可观察的.take(1)。toSingle()或者确实 observable.take(1).single()