計算原始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
。
發(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ù)生成。
發(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ù)生成。
計算原始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)是count
和countLong
。
示例代碼
String[] items = new String[] { "one", "two", "three" };
assertEquals( new Integer(3), Observable.from(items).count().toBlocking().single() );
計算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,后者這個字符串表示的是前者所有字符串以你指定的分界符連接的結果。
不交錯的發(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
, selectConcat
或selectConcatObserver
),他會變換原始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)
。
按順序?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" />
collect
與reduce
類似,但它的目的是收集原始Observable發(fā)射的所有數(shù)據(jù)到一個可變的數(shù)據(jù)結構,collect
生成的這個Observable會發(fā)射這項數(shù)據(jù)。它需要兩個參數(shù):
collect
默認不在任何特定的調(diào)度器上執(zhí)行。