RxJava2的操作符的主要類型
寶石圖、彈珠圖 (marble diagrams)
—>
:Observable的時(shí)間線,從左至右流動(dòng)
★
:星星、圓、方塊等表示Observable發(fā)射的items
|
:時(shí)間線最后的小豎線表示Observable的事件流已經(jīng)成功發(fā)射完畢了
X
:時(shí)間線最后的X符合表示由于某種原因Observable非正常終止發(fā)射,產(chǎn)生了error
上面幾種元素的組合在一起代表一個(gè)完整的Observable
-->
方向朝下的虛線箭頭表示以及中間的長(zhǎng)方框表示正在對(duì)上面的Observable進(jìn)行某種轉(zhuǎn)換。長(zhǎng)方框里的文字展示了轉(zhuǎn)換的性質(zhì)。下面的Observable是對(duì)上面的Observable轉(zhuǎn)換的結(jié)果。
主要操作符解讀
Create
通過(guò)傳入一個(gè)發(fā)射器,創(chuàng)建一個(gè)Observable
onNext可以被調(diào)用多次,但是onComplete和onError只會(huì)被調(diào)用一次,其后的調(diào)用不再執(zhí)行。
Map
通過(guò)一個(gè)函數(shù)將一個(gè)Observable發(fā)射的item逐個(gè)進(jìn)行轉(zhuǎn)換。
Zip
把多個(gè)Observable的發(fā)射物通過(guò)特定函數(shù)組合在一起,然后發(fā)射組合后的item。
Concat
將兩個(gè)Observable的發(fā)射物連接在一起發(fā)射出來(lái)。
transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable
把一個(gè)Observable的發(fā)射物轉(zhuǎn)換成多個(gè)Observable,再把這多個(gè)Observable的發(fā)射物壓縮進(jìn)一個(gè)Observable中發(fā)射出來(lái)。
flat操作符不保證順序。
比喻:A發(fā)射了一顆子彈過(guò)來(lái),B發(fā)射了一顆子彈過(guò)來(lái),我在中間通過(guò)flatMap進(jìn)行了一種不可描述的操作,把A的子彈變成了兩根箭,把B的子彈也變成了兩根箭。然后又一股腦把這四根箭裝在一把弓弩上發(fā)射出去了。
用途:多個(gè)網(wǎng)絡(luò)的轉(zhuǎn)換。
concatMap
concatMap 與 FlatMap 的唯一區(qū)別就是 concatMap 保證了順序。
distinct
distinctUntilChanged
去重。
Filter
過(guò)濾器
buffer
將一個(gè)Observable發(fā)射的items按照周期聚集成數(shù)據(jù)捆(bundles),然后再發(fā)射這些數(shù)據(jù)捆。
可以按照個(gè)數(shù)聚集,也可以按照時(shí)間聚集。 多個(gè)對(duì)象聚集被轉(zhuǎn)成List。
timer
定時(shí)任務(wù)、延時(shí)發(fā)射。在 1.x 中它還可以執(zhí)行間隔邏輯,但在 2.x 中此功能被交給了 interval。
do
注冊(cè)一個(gè)Action,在Observable的相對(duì)應(yīng)的event發(fā)生時(shí)調(diào)用。
doAfterTerminate
doOnComplete
doOnDispose
doOnEach
doOnError
doOnLifecycle
doOnNext
doOnSubscribe
doOnTerminate
onTerminateDetach
最常用的是doOnNext 和 doOnSubscribe
skip
跳過(guò)一個(gè)Observable發(fā)射的前n個(gè)item。
take
只發(fā)射前n個(gè)item。
just
創(chuàng)建一個(gè)發(fā)射指定item的Observable。
debounce
限流
defer
Observer訂閱時(shí)才會(huì)創(chuàng)建Observable,而且為每個(gè)Observer都創(chuàng)建新的Observable。
merge
把多個(gè)Observable的發(fā)射物merge一下。