RXJava学習ノート(2)

10037 ワード

へんかんさぎょう


前編の学習を通して、私たちはどのようにObservableオブジェクトを作成するかを知っていて、subscribeを通じてイベントをObserverに渡しますが、これらだけでは足りないことを知っていて、いくつかの複雑なシーンがあって、Observableに対していくつかの変換を行ってデータを送信する必要があります.では、この文章で系統的に勉強しましょう.
  • Bufferオペレータ
  • Observable.from(email).buffer(3).subscribe(
    new Action1>() {
          @Overridepublic void call(List strings) { 
                for (int i=0;i

    実行結果
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email1
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email2
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email3
    com.renyu.rxdemo D/SampleTransformingActiv: ==========================
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email4
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email5
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email6
    com.renyu.rxdemo D/SampleTransformingActiv: ==========================
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email7
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email8
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email9
    com.renyu.rxdemo D/SampleTransformingActiv: ==========================
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email10
    com.renyu.rxdemo D/SampleTransformingActiv: ==========================
    

    bufferはであり,本例ではキャッシュ3個毎に放出して2つのパラメータを見る方法である.
    Observable.from(email).buffer(3, 5).subscribe(
          new Action1>() { 
                @Override public void call(List strings) { 
                    for (int i=0;i

    実行結果
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email1
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email2
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email3
    com.renyu.rxdemo D/SampleTransformingActiv: ===========
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email6
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email7
    com.renyu.rxdemo D/SampleTransformingActiv: strings:email8
    com.renyu.rxdemo D/SampleTransformingActiv: ===========
    

    buffer(count,
    subscription=Observable.create(
        new Observable.OnSubscribe() { @Override public void call(Subscriber super String> subscriber) { 
            if (!subscriber.isUnsubscribed()) { 
                for (int i=0;i>() { 
            @Override public void call(List strings) { 
                for (int i=0;i

    実行結果
    02-15 17:15:22.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email1
    02-15 17:15:22.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email2
    02-15 17:15:22.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email3
    02-15 17:15:22.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email4
    02-15 17:15:22.945 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
    02-15 17:15:24.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email5
    02-15 17:15:24.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email6
    02-15 17:15:24.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email7
    02-15 17:15:24.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email8
    02-15 17:15:24.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
    02-15 17:15:26.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email9
    02-15 17:15:26.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email10
    02-15 17:15:26.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
    02-15 17:15:28.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
    02-15 17:15:30.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
    02-15 17:15:32.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
    

    観察時間に注意してください.こちらは2秒ごとに操作を行います.
  • FlatMapオペレータ
  • Observable.just("1", "2", "3", "4", "5", "6").flatMap(
        new Func1>() { 
            @Override public Observable call(String s) { 
                return Observable.just(s+"2"); 
            }
        }).subscribe(new Action1() { 
            @Override public void call(String s) { 
                Log.d("SampleTransformingActiv", s); 
            }
    });
    

    実行結果
    com.renyu.rxdemo D/SampleTransformingActiv: 12
    com.renyu.rxdemo D/SampleTransformingActiv: 22
    com.renyu.rxdemo D/SampleTransformingActiv: 32
    com.renyu.rxdemo D/SampleTransformingActiv: 42
    com.renyu.rxdemo D/SampleTransformingActiv: 52
    com.renyu.rxdemo D/SampleTransformingActiv: 62
    

    flatMapは , Observable , , , concatMapです
  • SwitchMapオペレータ
  • Observable.just(10, 20, 30).switchMap(
        new Func1>() { 
            @Override public Observable call(Integer integer) { 
                //10 1000 、20 30 50  
                int delay = 1000; 
                if (integer>10) { delay=50; } 
                return Observable.just(integer).delay(delay, TimeUnit.MILLISECONDS); 
            }
        }).subscribe(new Action1() { 
            @Override public void call(Integer integer) { 
                Log.d("SampleTransformingActiv", "integer:" + integer); 
            }
    });
    

    実行結果
    com.renyu.rxdemo D/SampleTransformingActiv: integer:30
    

    switchmapの機能はflatMapと同様であり、いずれもObservableを変換するものであるが、switchmap Observable , Observableと区別されるため、本例は前のflatmapのように3つの結果を生じるのではなく、直接最後のObservableが前の2つに取って代わった.
  • groupByオペレータ
  • Observable.just("1", "2", "3", "4", "5", "6").groupBy(
        new Func1() { 
            @Override public Boolean call(String s) { 
                return Integer.parseInt(s)>3; 
            }
    }).subscribe(new Action1>() { 
          @Override public void call(final GroupedObservable booleanStringGroupedObservable) {  
               booleanStringGroupedObservable.subscribe(new Action1() { 
               @Override public void call(String s) { 
                   Log.d("SampleTransformingActiv", booleanStringGroupedObservable.getKey() + " " + s); 
                } 
           }); 
    }});
    

    実行結果
    com.renyu.rxdemo D/SampleTransformingActiv: false 1
    com.renyu.rxdemo D/SampleTransformingActiv: false 2
    com.renyu.rxdemo D/SampleTransformingActiv: false 3
    com.renyu.rxdemo D/SampleTransformingActiv: true 4
    com.renyu.rxdemo D/SampleTransformingActiv: true 5
    com.renyu.rxdemo D/SampleTransformingActiv: true 6
    

    groupByは key ,
  • Mapオペレータ
  • Observable.just("1", "2", "3", "4", "5", "6").map(
        new Func1() { 
            @Override public Integer call(String s) { 
                return Integer.parseInt(s); 
            }
        }).subscribe(new Action1() { 
            @Override public void call(Integer integer) { 
                Log.d("SampleTransformingActiv", "integer:" + integer); 
            }
    });
    

    実行結果
    com.renyu.rxdemo D/SampleTransformingActiv: integer:1
    com.renyu.rxdemo D/SampleTransformingActiv: integer:2
    com.renyu.rxdemo D/SampleTransformingActiv: integer:3
    com.renyu.rxdemo D/SampleTransformingActiv: integer:4
    com.renyu.rxdemo D/SampleTransformingActiv: integer:5
    com.renyu.rxdemo D/SampleTransformingActiv: integer:6
    

    mapとflatmapは機能的に一致し、違いはflatmap Observable , map である.
  • Castオペレータ
  • Observable.just("1", "2", "3", "4", "5", "6").cast(String.class).subscribe(
        new Action1() { @Override public void call(String integer) { 
            Log.d("SampleTransformingActiv", "integer:" + integer); 
        }
    });
    

    実行結果
    com.renyu.rxdemo D/SampleTransformingActiv: integer:1
    com.renyu.rxdemo D/SampleTransformingActiv: integer:2
    com.renyu.rxdemo D/SampleTransformingActiv: integer:3
    com.renyu.rxdemo D/SampleTransformingActiv: integer:4
    com.renyu.rxdemo D/SampleTransformingActiv: integer:5
    com.renyu.rxdemo D/SampleTransformingActiv: integer:6
    

    cast直接
  • Scan
  • Observable.just(1, 2, 3, 4, 5, 6).scan(new Func2() { 
        @Override public Integer call(Integer integer, Integer integer2) { 
            return integer+integer2; 
        }
    }).subscribe(new Action1() { 
        @Override public void call(Integer integer) { 
            Log.d("SampleTransformingActiv", "integer:" + integer); 
        }
    });
    

    実行結果
    com.renyu.rxdemo D/SampleTransformingActiv: integer:1
    com.renyu.rxdemo D/SampleTransformingActiv: integer:3
    com.renyu.rxdemo D/SampleTransformingActiv: integer:6
    com.renyu.rxdemo D/SampleTransformingActiv: integer:10
    com.renyu.rxdemo D/SampleTransformingActiv: integer:15
    com.renyu.rxdemo D/SampleTransformingActiv: integer:21
    

    scan , ,
  • Windowの役割 Buffer , Observable, Buffer list、ここでは
  • はもう言わない

    主な参考資料

  • Android開発者のRxJavaに物線大神を投げる文章を詳しく解いて、私のRXJava啓蒙文章
  • 木水川のブログRXJavaオペレータについて詳細に説明し、詳細な例
  • を提供した.
  • *ReactiveXドキュメント中国語翻訳mcxiaoke翻訳のRXJava中国語ドキュメント**
  • Android RxJava使用紹介job_Hesc RXJavaオペレータの説明および簡単な例