RxJava2的操作符的主要类型
宝石图、弹珠图 (marble diagrams)
—>
:Observable的时间线,从左至右流动
★
:星星、圆、方块等表示Observable发射的items
|
:时间线最后的小竖线表示Observable的事件流已经成功发射完毕了
X
:时间线最后的X符合表示由于某种原因Observable非正常终止发射,产生了error
上面几种元素的组合在一起代表一个完整的Observable
-->
方向朝下的虚线箭头表示以及中间的长方框表示正在对上面的Observable进行某种转换。长方框里的文字展示了转换的性质。下面的Observable是对上面的Observable转换的结果。
主要操作符解读
Create
通过传入一个发射器,创建一个Observable
onNext可以被调用多次,但是onComplete和onError只会被调用一次,其后的调用不再执行。
Map
通过一个函数将一个Observable发射的item逐个进行转换。
Zip
把多个Observable的发射物通过特定函数组合在一起,然后发射组合后的item。
Concat
将两个Observable的发射物连接在一起发射出来。
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的子弹也变成了两根箭。然后又一股脑把这四根箭装在一把弓弩上发射出去了。
用途:多个网络的转换。
concatMap
concatMap 与 FlatMap 的唯一区别就是 concatMap 保证了顺序。
distinct
distinctUntilChanged
去重。
Filter
过滤器
buffer
将一个Observable发射的items按照周期聚集成数据捆(bundles),然后再发射这些数据捆。
可以按照个数聚集,也可以按照时间聚集。 多个对象聚集被转成List。
timer
定时任务、延时发射。在 1.x 中它还可以执行间隔逻辑,但在 2.x 中此功能被交给了 interval。
do
注册一个Action,在Observable的相对应的event发生时调用。
doAfterTerminate
doOnComplete
doOnDispose
doOnEach
doOnError
doOnLifecycle
doOnNext
doOnSubscribe
doOnTerminate
onTerminateDetach
最常用的是doOnNext 和 doOnSubscribe
skip
跳过一个Observable发射的前n个item。
take
只发射前n个item。
just
创建一个发射指定item的Observable。
debounce
限流
defer
Observer订阅时才会创建Observable,而且为每个Observer都创建新的Observable。
merge
把多个Observable的发射物merge一下。