鍍金池/ 教程/ Android/ FlatMap
調度器 Scheduler
Empty/Never/Throw
Replay
這個(gè)頁(yè)面展示了創(chuàng )建Observable的各種方法。
ObserveOn
ReactiveX
TimeInterval
Window
本頁(yè)展示的操作符用于對整個(gè)序列執行算法操作或其它操作,由于這些操作必須等待數據發(fā)射完成(通常也必須緩存這些數據),它們對于非常長(cháng)
IgnoreElements
Distinct
Last
Start
And/Then/When
Switch
創(chuàng )建操作
Materialize/Dematerialize
CombineLatest
Catch
實(shí)現自己的操作符
StringObservable
Map
ConnectableObservable
Using
Take
BlockingObservable
TakeLast
Defer
RxJavaSchedulersHook
First
FlatMap
這個(gè)頁(yè)面的操作符可用于根據條件發(fā)射或變換Observables,或者對它們做布爾運算:
Do
Repeat
Serialize
這個(gè)頁(yè)面展示的操作符可用于過(guò)濾和選擇Observable發(fā)射的數據序列。
這個(gè)頁(yè)面列出了很多用于Observable的輔助操作符
Single
Retry
從錯誤中恢復的技術(shù)
Sample
Merge
算術(shù)和聚合操作
Range
Timestamp
RxJava Issues
From
Subscribe
Subject
Delay
Skip
SubscribeOn
Filter
按字母順序排列的全部操作符列表
Timeout
Scan
onError
Zip
RxJava文檔和教程
Publish
ElementAt
第一個(gè)例子
SkipLast
Just
Timer
Debounce
GroupBy
條件和布爾操作
這個(gè)頁(yè)面展示了可用于對Observable發(fā)射的數據執行變換操作的各種操作符。
Introduction
rxjava-async
介紹響應式編程
這個(gè)頁(yè)面展示的操作符可用于組合多個(gè)Observables。
ReactiveX
Connect
操作符分類(lèi)
StartWith
Interval
Join
To
Buffer
RefCount
介紹
Observable

FlatMap

FlatMap

FlatMap將一個(gè)發(fā)射數據的Observable變換為多個(gè)Observables,然后將它們發(fā)射的數據合并后放進(jìn)一個(gè)單獨的Observable

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/flatMap.png" alt="flatMap" />

FlatMap操作符使用一個(gè)指定的函數對原始Observable發(fā)射的每一項數據執行變換操作,這個(gè)函數返回一個(gè)本身也發(fā)射數據的Observable,然后FlatMap合并這些Observables發(fā)射的數據,最后將合并后的結果當做它自己的數據序列發(fā)射。

這個(gè)方法是很有用的,例如,當你有一個(gè)這樣的Observable:它發(fā)射一個(gè)數據序列,這些數據本身包含Observable成員或者可以變換為Observable,因此你可以創(chuàng )建一個(gè)新的Observable發(fā)射這些次級Observable發(fā)射的數據的完整集合。

注意:FlatMap對這些Observables發(fā)射的數據做的是合并(merge)操作,因此它們可能是交錯的。

在許多語(yǔ)言特定的實(shí)現中,還有一個(gè)操作符不會(huì )讓變換后的Observables發(fā)射的數據交錯,它按照嚴格的順序發(fā)射這些數據,這個(gè)操作符通常被叫作ConcatMap或者類(lèi)似的名字。

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/mergeMap.png" alt="mergeMap" />

RxJava將這個(gè)操作符實(shí)現為flatMap函數。

注意:如果任何一個(gè)通過(guò)這個(gè)flatMap操作產(chǎn)生的單獨的Observable調用onError異常終止了,這個(gè)Observable自身會(huì )立即調用onError并終止。

這個(gè)操作符有一個(gè)接受額外的int參數的一個(gè)變體。這個(gè)參數設置flatMap從原來(lái)的Observable映射Observables的最大同時(shí)訂閱數。當達到這個(gè)限制時(shí),它會(huì )等待其中一個(gè)終止然后再訂閱另一個(gè)。

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/mergeMap.nce.png" alt="mergeMap.nce" />

還有一個(gè)版本的flatMap為原始Observable的每一項數據和每一個(gè)通知創(chuàng )建一個(gè)新的Observable(并對數據平坦化)。

它也有一個(gè)接受額外int參數的變體。

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/mergeMap.r.png" alt="mergeMap.r" />

還有一個(gè)版本的flatMap會(huì )使用原始Observable的數據觸發(fā)的Observable組合這些數據,然后發(fā)射這些數據組合。它也有一個(gè)接受額外int參數的版本。

flatMapIterable

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/mergeMapIterable.png" alt="mergeMapIterable" />

flatMapIterable這個(gè)變體成對的打包數據,然后生成Iterable而不是原始數據和生成的Observables,但是處理方式是相同的。

concatMap

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/concatMap.png" alt="concatMap" />

還有一個(gè)concatMap操作符,它類(lèi)似于最簡(jiǎn)單版本的flatMap,但是它按次序連接而不是合并那些生成的Observables,然后產(chǎn)生自己的數據序列。

switchMap

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/switchMap.png" alt="switchMap" />

RxJava還實(shí)現了switchMap操作符。它和flatMap很像,除了一點(diǎn):當原始Observable發(fā)射一個(gè)新的數據(Observable)時(shí),它將取消訂閱并停止監視產(chǎn)生執之前那個(gè)數據的Observable,只監視當前這一個(gè)。

split

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/St.split.png" alt="St.split" />

在特殊的StringObservable類(lèi)(默認沒(méi)有包含在RxJava中)中還有一個(gè)split操作符。它將一個(gè)發(fā)射字符串的Observable轉換為另一個(gè)發(fā)射字符串的Observable,只不過(guò),后者將原始的數據序列當做一個(gè)數據流,使用一個(gè)正則表達式邊界分割它們,然后合并發(fā)射分割的結果。