計(jì)算原始Observable發(fā)射數(shù)字的平均值并發(fā)射它
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/average.c.png" alt="average" />
Average
操作符操作符一個(gè)發(fā)射數(shù)字的Observable,并發(fā)射單個(gè)值:原始Observable發(fā)射的數(shù)字序列的平均值。
這個(gè)操作符不包含在RxJava核心模塊中,它屬于不同的rxjava-math
模塊。它被實(shí)現(xiàn)為四個(gè)操作符:averageDouble
, averageFloat
, averageInteger
, averageLong
。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/average.f.png" alt="average" />
如果原始Observable不發(fā)射任何數(shù)據(jù),這個(gè)操作符會拋異常:IllegalArgumentException
。
發(fā)射原始Observable的最小值
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/min.c.png" alt="min" />
Min
操作符操作一個(gè)發(fā)射數(shù)值的Observable并發(fā)射單個(gè)值:最小的那個(gè)值。
RxJava中,min
屬于rxjava-math
模塊。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/min.png" alt="min" />
min
接受一個(gè)可選參數(shù),用于比較兩項(xiàng)數(shù)據(jù)的大小,如果最小值的數(shù)據(jù)超過一項(xiàng),min
會發(fā)射原始Observable最近發(fā)射的那一項(xiàng)。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/minBy.png" alt="minBy" />
minBy
類似于min
,但是它發(fā)射的不是最小值,而是發(fā)射Key最小的項(xiàng),Key由你指定的一個(gè)函數(shù)生成。
發(fā)射原始Observable的最大值
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/max.c.png" alt="max" />
Max
操作符操作一個(gè)發(fā)射數(shù)值的Observable并發(fā)射單個(gè)值:最大的那個(gè)值。
RxJava中,max
屬于rxjava-math
模塊。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/max.png" alt="max" />
max
接受一個(gè)可選參數(shù),用于比較兩項(xiàng)數(shù)據(jù)的大小,如果最大值的數(shù)據(jù)超過一項(xiàng),max
會發(fā)射原始Observable最近發(fā)射的那一項(xiàng)。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/maxBy.png" alt="maxBy" />
maxBy
類似于max
,但是它發(fā)射的不是最大值,而是發(fā)射Key最大的項(xiàng),Key由你指定的一個(gè)函數(shù)生成。
計(jì)算原始Observable發(fā)射物的數(shù)量,然后只發(fā)射這個(gè)值
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/count.c.png" alt="count" />
Count
操作符將一個(gè)Observable轉(zhuǎn)換成一個(gè)發(fā)射單個(gè)值的Observable,這個(gè)值表示原始Observable發(fā)射的數(shù)據(jù)的數(shù)量。
如果原始Observable發(fā)生錯誤終止,Count
不發(fā)射數(shù)據(jù)而是直接傳遞錯誤通知。如果原始Observable永遠(yuǎn)不終止,Count
既不會發(fā)射數(shù)據(jù)也不會終止。
RxJava的實(shí)現(xiàn)是count
和countLong
。
示例代碼
String[] items = new String[] { "one", "two", "three" };
assertEquals( new Integer(3), Observable.from(items).count().toBlocking().single() );
計(jì)算Observable發(fā)射的數(shù)值的和并發(fā)射這個(gè)和
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/sum.c.png" alt="sum" />
Sum
操作符操作一個(gè)發(fā)射數(shù)值的Observable,僅發(fā)射單個(gè)值:原始Observable所有數(shù)值的和。
RxJava的實(shí)現(xiàn)是sumDouble
, sumFloat
, sumInteger
, sumLong
,它們不是RxJava核心模塊的一部分,屬于rxjava-math
模塊。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/sum.f.png" alt="sum.f" />
你可以使用一個(gè)函數(shù),計(jì)算Observable每一項(xiàng)數(shù)據(jù)的函數(shù)返回值的和。
在StringObservable
類(這個(gè)類不是RxJava核心模塊的一部分)中有一個(gè)stringConcat
操作符,它將一個(gè)發(fā)射字符串序列的Observable轉(zhuǎn)換為一個(gè)發(fā)射單個(gè)字符串的Observable,后者這個(gè)字符串表示的是前者所有字符串的連接。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/St.join.png" alt="St.join" />
StringObservable
類還有一個(gè)join
操作符,它將一個(gè)發(fā)射字符串序列的Observable轉(zhuǎn)換為一個(gè)發(fā)射單個(gè)字符串的Observable,后者這個(gè)字符串表示的是前者所有字符串以你指定的分界符連接的結(jié)果。
不交錯的發(fā)射兩個(gè)或多個(gè)Observable的發(fā)射物
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/concat.c.png" alt="concat" />
Concat
操作符連接多個(gè)Observable的輸出,就好像它們是一個(gè)Observable,第一個(gè)Observable發(fā)射的所有數(shù)據(jù)在第二個(gè)Observable發(fā)射的任何數(shù)據(jù)前面,以此類推。
直到前面一個(gè)Observable終止,Concat
才會訂閱額外的一個(gè)Observable。注意:因此,如果你嘗試連接一個(gè)"熱"Observable(這種Observable在創(chuàng)建后立即開始發(fā)射數(shù)據(jù),即使沒有訂閱者),Concat
將不會看到也不會發(fā)射它之前發(fā)射的任何數(shù)據(jù)。
在ReactiveX的某些實(shí)現(xiàn)中有一種ConcatMap
操作符(名字可能叫concat_all
, concat_map
, concatMapObserver
, for
, forIn/for_in
, mapcat
, selectConcat
或selectConcatObserver
),他會變換原始Observable發(fā)射的數(shù)據(jù)到一個(gè)對應(yīng)的Observable,然后再按觀察和變換的順序進(jìn)行連接操作。
StartWith
操作符類似于Concat
,但是它是插入到前面,而不是追加那些Observable的數(shù)據(jù)到原始Observable發(fā)射的數(shù)據(jù)序列。
Merge
操作符也差不多,它結(jié)合兩個(gè)或多個(gè)Observable的發(fā)射物,但是數(shù)據(jù)可能交錯,而Concat
不會讓多個(gè)Observable的發(fā)射物交錯。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/concat.png" alt="concat" />
RxJava中的實(shí)現(xiàn)叫concat
。
還有一個(gè)實(shí)例方法叫concatWith
,這兩者是等價(jià)的:Observable.concat(a,b)
和a.concatWith(b)
。
按順序?qū)bservable發(fā)射的每項(xiàng)數(shù)據(jù)應(yīng)用一個(gè)函數(shù)并發(fā)射最終的值
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/reduce.c.png" alt="reduce" />
Reduce
操作符對原始Observable發(fā)射數(shù)據(jù)的第一項(xiàng)應(yīng)用一個(gè)函數(shù),然后再將這個(gè)函數(shù)的返回值與第二項(xiàng)數(shù)據(jù)一起傳遞給函數(shù),以此類推,持續(xù)這個(gè)過程知道原始Observable發(fā)射它的最后一項(xiàng)數(shù)據(jù)并終止,此時(shí)Reduce
返回的Observable發(fā)射這個(gè)函數(shù)返回的最終值。
在其它場景中,這種操作有時(shí)被稱為累積
,聚集
,壓縮
,折疊
,注射
等。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/reduce.png" alt="reduce" />
注意如果原始Observable沒有發(fā)射任何數(shù)據(jù),reduce
拋出異常IllegalArgumentException
。
reduce
默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/reduceSeed.png" alt="reduce" />
還有一個(gè)版本的reduce
額外接受一個(gè)種子參數(shù)。注意傳遞一個(gè)值為null
的種子是合法的,但是與不傳種子參數(shù)的行為是不同的。如果你傳遞了種子參數(shù),并且原始Observable沒有發(fā)射任何數(shù)據(jù),reduce
操作符將發(fā)射這個(gè)種子值然后正常終止,而不是拋異常。
提示:不建議使用reduce
收集發(fā)射的數(shù)據(jù)到一個(gè)可變的數(shù)據(jù)結(jié)構(gòu),那種場景你應(yīng)該使用collect
。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/collect.png" alt="collect" />
collect
與reduce
類似,但它的目的是收集原始Observable發(fā)射的所有數(shù)據(jù)到一個(gè)可變的數(shù)據(jù)結(jié)構(gòu),collect
生成的這個(gè)Observable會發(fā)射這項(xiàng)數(shù)據(jù)。它需要兩個(gè)參數(shù):
collect
默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。