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

算術和聚合操作

Average

計算原始Observable發(fā)射數(shù)字的平均值并發(fā)射它

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

Average操作符操作符一個發(fā)射數(shù)字的Observable,并發(fā)射單個值:原始Observable發(fā)射的數(shù)字序列的平均值。

這個操作符不包含在RxJava核心模塊中,它屬于不同的rxjava-math模塊。它被實現(xiàn)為四個操作符:averageDouble, averageFloat, averageInteger, averageLong。

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

如果原始Observable不發(fā)射任何數(shù)據(jù),這個操作符會拋異常:IllegalArgumentException。

Min

發(fā)射原始Observable的最小值

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

Min操作符操作一個發(fā)射數(shù)值的Observable并發(fā)射單個值:最小的那個值。

RxJava中,min屬于rxjava-math模塊。

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

min接受一個可選參數(shù),用于比較兩項數(shù)據(jù)的大小,如果最小值的數(shù)據(jù)超過一項,min會發(fā)射原始Observable最近發(fā)射的那一項。

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

minBy類似于min,但是它發(fā)射的不是最小值,而是發(fā)射Key最小的項,Key由你指定的一個函數(shù)生成。

Max

發(fā)射原始Observable的最大值

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

Max操作符操作一個發(fā)射數(shù)值的Observable并發(fā)射單個值:最大的那個值。

RxJava中,max屬于rxjava-math模塊。

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

max接受一個可選參數(shù),用于比較兩項數(shù)據(jù)的大小,如果最大值的數(shù)據(jù)超過一項,max會發(fā)射原始Observable最近發(fā)射的那一項。

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

maxBy類似于max,但是它發(fā)射的不是最大值,而是發(fā)射Key最大的項,Key由你指定的一個函數(shù)生成。

Count

計算原始Observable發(fā)射物的數(shù)量,然后只發(fā)射這個值

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

Count操作符將一個Observable轉換成一個發(fā)射單個值的Observable,這個值表示原始Observable發(fā)射的數(shù)據(jù)的數(shù)量。

如果原始Observable發(fā)生錯誤終止,Count不發(fā)射數(shù)據(jù)而是直接傳遞錯誤通知。如果原始Observable永遠不終止,Count既不會發(fā)射數(shù)據(jù)也不會終止。

RxJava的實現(xiàn)是countcountLong。

示例代碼


String[] items = new String[] { "one", "two", "three" };
assertEquals( new Integer(3), Observable.from(items).count().toBlocking().single() );

Sum

計算Observable發(fā)射的數(shù)值的和并發(fā)射這個和

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

Sum操作符操作一個發(fā)射數(shù)值的Observable,僅發(fā)射單個值:原始Observable所有數(shù)值的和。

RxJava的實現(xiàn)是sumDouble, sumFloat, sumInteger, sumLong,它們不是RxJava核心模塊的一部分,屬于rxjava-math模塊。

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

你可以使用一個函數(shù),計算Observable每一項數(shù)據(jù)的函數(shù)返回值的和。

StringObservable類(這個類不是RxJava核心模塊的一部分)中有一個stringConcat操作符,它將一個發(fā)射字符串序列的Observable轉換為一個發(fā)射單個字符串的Observable,后者這個字符串表示的是前者所有字符串的連接。

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

StringObservable類還有一個join操作符,它將一個發(fā)射字符串序列的Observable轉換為一個發(fā)射單個字符串的Observable,后者這個字符串表示的是前者所有字符串以你指定的分界符連接的結果。

Concat

不交錯的發(fā)射兩個或多個Observable的發(fā)射物

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

Concat操作符連接多個Observable的輸出,就好像它們是一個Observable,第一個Observable發(fā)射的所有數(shù)據(jù)在第二個Observable發(fā)射的任何數(shù)據(jù)前面,以此類推。

直到前面一個Observable終止,Concat才會訂閱額外的一個Observable。注意:因此,如果你嘗試連接一個"熱"Observable(這種Observable在創(chuàng)建后立即開始發(fā)射數(shù)據(jù),即使沒有訂閱者),Concat將不會看到也不會發(fā)射它之前發(fā)射的任何數(shù)據(jù)。

在ReactiveX的某些實現(xiàn)中有一種ConcatMap操作符(名字可能叫concat_all, concat_map, concatMapObserver, for, forIn/for_in, mapcat, selectConcatselectConcatObserver),他會變換原始Observable發(fā)射的數(shù)據(jù)到一個對應的Observable,然后再按觀察和變換的順序進行連接操作。

StartWith操作符類似于Concat,但是它是插入到前面,而不是追加那些Observable的數(shù)據(jù)到原始Observable發(fā)射的數(shù)據(jù)序列。

Merge操作符也差不多,它結合兩個或多個Observable的發(fā)射物,但是數(shù)據(jù)可能交錯,而Concat不會讓多個Observable的發(fā)射物交錯。

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

RxJava中的實現(xiàn)叫concat。

還有一個實例方法叫concatWith,這兩者是等價的:Observable.concat(a,b)a.concatWith(b)

Reduce

按順序?qū)bservable發(fā)射的每項數(shù)據(jù)應用一個函數(shù)并發(fā)射最終的值

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

Reduce操作符對原始Observable發(fā)射數(shù)據(jù)的第一項應用一個函數(shù),然后再將這個函數(shù)的返回值與第二項數(shù)據(jù)一起傳遞給函數(shù),以此類推,持續(xù)這個過程知道原始Observable發(fā)射它的最后一項數(shù)據(jù)并終止,此時Reduce返回的Observable發(fā)射這個函數(shù)返回的最終值。

在其它場景中,這種操作有時被稱為累積,聚集,壓縮折疊,注射等。

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

注意如果原始Observable沒有發(fā)射任何數(shù)據(jù),reduce拋出異常IllegalArgumentException

reduce默認不在任何特定的調(diào)度器上執(zhí)行。

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

還有一個版本的reduce額外接受一個種子參數(shù)。注意傳遞一個值為null的種子是合法的,但是與不傳種子參數(shù)的行為是不同的。如果你傳遞了種子參數(shù),并且原始Observable沒有發(fā)射任何數(shù)據(jù),reduce操作符將發(fā)射這個種子值然后正常終止,而不是拋異常。

提示:不建議使用reduce收集發(fā)射的數(shù)據(jù)到一個可變的數(shù)據(jù)結構,那種場景你應該使用collect

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

collectreduce類似,但它的目的是收集原始Observable發(fā)射的所有數(shù)據(jù)到一個可變的數(shù)據(jù)結構,collect生成的這個Observable會發(fā)射這項數(shù)據(jù)。它需要兩個參數(shù):

  1. 一個函數(shù)返回可變數(shù)據(jù)結構
  2. 另一個函數(shù),當傳遞給它這個數(shù)據(jù)結構和原始Observable發(fā)射的數(shù)據(jù)項時,適當?shù)匦薷臄?shù)據(jù)結構。

collect默認不在任何特定的調(diào)度器上執(zhí)行。

上一篇:GroupBy下一篇:RxJavaSchedulersHook