RxJava2操作符总结

RxJava2的操作符的主要类型

宝石图、弹珠图 (marble diagrams)

marble diagrams

—>:Observable的时间线,从左至右流动
:星星、圆、方块等表示Observable发射的items
|:时间线最后的小竖线表示Observable的事件流已经成功发射完毕了
X:时间线最后的X符合表示由于某种原因Observable非正常终止发射,产生了error
上面几种元素的组合在一起代表一个完整的Observable
-->方向朝下的虚线箭头表示以及中间的长方框表示正在对上面的Observable进行某种转换。长方框里的文字展示了转换的性质。下面的Observable是对上面的Observable转换的结果。

http://rxmarbles.com/

主要操作符解读

Create
通过传入一个发射器,创建一个Observable

RxJava2操作符总结_第1张图片

onNext可以被调用多次,但是onComplete和onError只会被调用一次,其后的调用不再执行。

Map
通过一个函数将一个Observable发射的item逐个进行转换。

Zip
把多个Observable的发射物通过特定函数组合在一起,然后发射组合后的item。

Concat
将两个Observable的发射物连接在一起发射出来。

FlatMap

transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable

把一个Observable的发射物转换成多个Observable,再把这多个Observable的发射物压缩进一个Observable中发射出来。
flat操作符不保证顺序。
比喻:A发射了一颗子弹过来,B发射了一颗子弹过来,我在中间通过flatMap进行了一种不可描述的操作,把A的子弹变成了两根箭,把B的子弹也变成了两根箭。然后又一股脑把这四根箭装在一把弓弩上发射出去了。


RxJava2操作符总结_第2张图片

用途:多个网络的转换。

concatMap
concatMap 与 FlatMap 的唯一区别就是 concatMap 保证了顺序。

distinct
distinctUntilChanged
去重。

RxJava2操作符总结_第3张图片

RxJava2操作符总结_第4张图片

Filter
过滤器

RxJava2操作符总结_第5张图片

buffer
将一个Observable发射的items按照周期聚集成数据捆(bundles),然后再发射这些数据捆。
可以按照个数聚集,也可以按照时间聚集。 多个对象聚集被转成List。

RxJava2操作符总结_第6张图片

timer
定时任务、延时发射。在 1.x 中它还可以执行间隔逻辑,但在 2.x 中此功能被交给了 interval。

RxJava2操作符总结_第7张图片

interval

RxJava2操作符总结_第8张图片

do
注册一个Action,在Observable的相对应的event发生时调用。

RxJava2操作符总结_第9张图片

doAfterTerminate doOnComplete doOnDispose doOnEach doOnError doOnLifecycle doOnNext doOnSubscribe doOnTerminate onTerminateDetach
最常用的是doOnNext 和 doOnSubscribe

skip
跳过一个Observable发射的前n个item。

RxJava2操作符总结_第10张图片

take
只发射前n个item。

RxJava2操作符总结_第11张图片

just
创建一个发射指定item的Observable。

RxJava2操作符总结_第12张图片

debounce
限流

RxJava2操作符总结_第13张图片

defer
Observer订阅时才会创建Observable,而且为每个Observer都创建新的Observable。

RxJava2操作符总结_第14张图片

last

RxJava2操作符总结_第15张图片

merge
把多个Observable的发射物merge一下。

RxJava2操作符总结_第16张图片

mergeDelayError

RxJava2操作符总结_第17张图片

scan

RxJava2操作符总结_第18张图片

amb

RxJava2操作符总结_第19张图片

你可能感兴趣的:(RxJava2操作符总结)