RxJava中Observable,Completable和Single之间有什么区别

Raj*_*har 95 rx-java rx-java2

任何人都可以用明确的例子解释RxJava中Observable,Completable和Single之间的区别吗?

在哪种情况下我们使用其中一个?

yos*_*riz 223

Observable是一般的ReactiveX构建块,它是随时间发送值的事件源.(并因此存在于ReactiveX扩展的每种语言中)
简而言之Observable事件是:
onNext*(onCompleted | onError)?/(*零或更多? - 零或1)

Single并且Completable是专门在RxJava中引入的新类型,它们代表减少类型Observable,具有更简洁的API.

Single表示Observable发出单个值或错误.

Completable表示Observable没有值,但只发出终端事件,onError或者onCompleted

你可以想到差异,比如返回的方法的差异:

  • 对象集合 - 可观察

  • 单个对象 - 单个

  • 和返回无值的方法(void方法) - 可完成.

Single当你有面向任务的Observable并且你期望单个值,比如执行一次的网络请求和返回值(或错误)时,网络调用是一次性操作,这意味着你不希望它返回其他值随着时间的推移.另一个例子是DB获取数据操作.

Completable如果你有一个Observable并且你不关心操作产生的价值,或者没有.例如,更新缓存,操作可以成功/失败,但没有值.
另一个例子是一些长时间运行的init操作,它不会返回任何内容.它可以是仅通过成功指示产生的UPDATE/PUT网络呼叫.

在任何情况下,Completable和Single都没有添加新功能,但它们引入了更强大和简洁的API,它们更多地讲述了API暴露的Observable背后的操作.

编辑:

RxJava2 Maybe:

RxJava2添加了一个名为的新类型Maybe,MaybeCompletable和Single 的组合.

在上面这样的语言中,Maybe可以被认为是一种返回Optional某种类型的方法 ,Optional是一个围绕Object的包装器,它明确告诉我们是否有一些值 - Object或者不是(而不是null).
随着Maybe我们可以有一定的价值完全一样Single或具有返回任何结果-就像Completable.另外,和两者一样,我们有错误.
Maybe当我们想要标记一个Observable可能没有价值并且只是完成时,这是很有价值的.
一个例子将从缓存中获取,我们不一定在缓存中有一个值,所以在这种情况下,我们将完成,我们将从onNext缓存中获取值.
这也值得使用RxJava2处理流中的非空值.

RxJava2 Flowable:

首先,让我们来定义背压.Backpressure是一种处理数据生成速度快于处理速度的方法. Flowable具有背压支持,允许下游请求物品.您可以在此处阅读有关差异的更多信息.

  • 流动性怎么样? (2认同)

Cha*_*ith 10

  1. FlowableObservable可以表示有限或无限的流.可流动的支撑背压.
  2. Single是具有单个元素的流.
  3. 也许是0或一个元素的流.
  4. 最后,Completable表示没有元素的流,即它只能在没有值或失败的情况下完成.

我在RXJava部分找到一个简明的答案.