1.變換操作
scan(?) — 對(duì)Observable發(fā)射的每一項(xiàng)數(shù)據(jù)應(yīng)用一個(gè)函數(shù)童芹,然后按順序依次發(fā)射每一個(gè)值
Observable.just(1,2,3)??????? .scan(newFunc2() {@OverridepublicIntegercall(Integer integer, Integer integer2){//自定義函數(shù)returninteger + integer2;??????????? }??????? })??????? .subscribe(newAction1() {@Overridepublicvoidcall(Integer integer){??????????????? Log.d("RxJava", String.valueOf(integer));??????????? }??????? });
結(jié)果:將自定義函數(shù)應(yīng)用于數(shù)據(jù)序列,并將這個(gè)函數(shù)的結(jié)果作為函數(shù)下一次的參數(shù)1使用胞此,1+0=1恶迈,1+2=3 涩金,3+3=6
11-06 02:54:43.040 25433-25433/keye.com.rxjavaobserver D/RxJava: 111-06 02:54:43.040 25433-25433/keye.com.rxjavaobserver D/RxJava: 311-06 02:54:43.040 25433-25433/keye.com.rxjavaobserver D/RxJava: 6
groupBy(?) — 將Observable分拆為Observable集合,將原始Observable發(fā)射的數(shù)據(jù)按Key分組暇仲,每一個(gè)Observable發(fā)射一組不同的數(shù)據(jù)
Observable.just(1,2,3,4)??????? .groupBy(newFunc1() {@OverridepublicIntegercall(Integer integer){//這里返回的結(jié)果為keyreturninteger +1;??????????? }??????? })??????? .subscribe(newAction1>() {@Overridepublicvoidcall(GroupedObservable groupedObservable){??????????????? groupedObservable.subscribe(newAction1() {@Overridepublicvoidcall(Integer integer){??????????????????????? Log.d("RxJava","key:"+ groupedObservable.getKey() +",value:"+ integer);??????????????????? }??????????????? });??????????? }??????? });
結(jié)果:在第一個(gè)func1函數(shù)中步做,設(shè)置key,最后生成一個(gè)Observable集合熔吗,并把每一個(gè)groupedObservable辆床,并依次發(fā)射出去
3162-3162/keye.com.rxjavaobserver D/RxJava: key:2,value:13162-3162/keye.com.rxjavaobserver D/RxJava: key:3,value:23162-3162/keye.com.rxjavaobserver D/RxJava: key:4,value:33162-3162/keye.com.rxjavaobserver D/RxJava: key:5,value:4
buffer(?) — 它定期從Observable收集數(shù)據(jù)到一個(gè)集合佳晶,然后把這些數(shù)據(jù)集合打包發(fā)射桅狠,而不是一次發(fā)射一個(gè)
Observable.just(1,2,3,4,5,6,7)????????? .buffer(2,1)????????? .subscribe(newAction1>() {@Overridepublicvoidcall(List integers){??????????????? Log.d("RxJava", integers +"");????????????? }});
結(jié)果:buffer()有兩個(gè)參數(shù)count和skip,count指定List的大小轿秧,skip指定每次發(fā)射一個(gè)List需要跳過幾個(gè)數(shù)中跌;buffer(2,?1):每組2個(gè)數(shù),每次跳過1個(gè)數(shù)菇篡,結(jié)果如下:
keye.com.rxjavaobserver D/RxJava: [1, 2]keye.com.rxjavaobserver D/RxJava: [4, 5]keye.com.rxjavaobserver D/RxJava: [7]
window(?) — 定期將來自O(shè)bservable的數(shù)據(jù)分拆成一些Observable窗口漩符,然后發(fā)射這些窗口,而不是每次發(fā)射一項(xiàng)
Observable.just(1,2,3,4,5,6,7)????????? .window(2,2)????????? .subscribe(newAction1>() {@Overridepublicvoidcall(Observable observable){????????????????? Log.d("RxJava","window");????????????????? observable.subscribe(newAction1() {@Overridepublicvoidcall(Integer integer){????????????????????????? Log.d("RxJava", integer +"");????????????????????? }????????????????? });????????????? }});
結(jié)果:window()操作符和buffer()類似驱还,都是緩存一段數(shù)據(jù)集合嗜暴,再打包發(fā)射出去
11-0603:30:29.19825883-25883/? D/RxJava:window11-0603:30:29.19825883-25883/? D/RxJava:111-0603:30:29.19825883-25883/? D/RxJava:211-0603:30:29.19825883-25883/? D/RxJava:window11-0603:30:29.19825883-25883/? D/RxJava:311-0603:30:29.19825883-25883/? D/RxJava:411-0603:30:29.19825883-25883/? D/RxJava:window11-0603:30:29.19825883-25883/? D/RxJava:511-0603:30:29.19925883-25883/? D/RxJava:611-0603:30:29.19925883-25883/? D/RxJava:window11-0603:30:29.19925883-25883/? D/RxJava:7