我偶然发现了这些方法,从我从文档中获得的方法,他们做的几乎完全相同。看看代码,他们显然做了不同的事情。从初学者single()
返回Observable
(为什么?),而toSingle()有效返回Single
。
我对被动世界的了解有限,让我感到疑惑,为什么这两种方法都存在?他们有什么不同?他们中的任何人应该使用另一个吗?
他们中的任何一个或两个immediately
会将Observable
转换为Single
,如果它没有发出任何项目,它会抛出错误吗?或者他们是否等待事件发出?
令我困惑的另一件事是他们的大理石图是不同的
(toSingle和single),但他们的文档说他们应该表现得完全一样,特别是它们的行为应该像single()
大理石图。
答案 0 :(得分:3)
为什么这两种方法都存在?
single()
是原始ReactiveX运算符集的一部分。稍后在toSingle()
引入RxJava时添加了Single
。
他们有什么不同?
他们返回不同的基础反应类。 single()
停留Observable
,toSingle()
转换为Single
。
他们是否应该使用另一个?
取决于您要使用的类型以及您是否计划很快转移到RxJava 2.x.在RxJava 2中,没有toSingle
和(大多数)运算符现在返回更合适的类型:single(T)
,singleOrError()
或singleElement()
。
他们的大理石图是不同的
toSingle
大理石没有错误情况,Single
类型的时间图表示事件随时间变化的惯例略有不同{{1 }}
答案 1 :(得分:0)
我相信两者都是相同的,两者都会在上游完成时生成1个项目,如果提供了多个项目(如文档所述),两者都会产生错误,因此使用它们的安全方式是可观察的.take(1)。toSingle()或者确实 observable.take(1).single()