RxJavaのAndroidプロジェクトでの使用(二)

5711 ワード

RxJavaオペレータ
  • map()オペレータは、Observableオブジェクトを変換するために使用され、mapオペレータはObservableオブジェクトを返します.これにより、1つのObservableオブジェクト上でmapオペレータを複数回使用し、最終的に最も簡潔なデータをSubscriberオブジェクト
  • に渡すチェーンコールを実現できます.
  • from()は入力として1つのセットを受信し、subscriber
  • に1つの要素を出力するたびに
  • flatmap() Observable.flatMap()は、一方のObservableの出力を入力として受信とともに他方のObservable
  • を出力する.
  • filterフィルタリングし、条件に合致しないフィルタを除去し、条件に合致する
  • を残す.
  • take最大出力数
  • を指定
  • doOnNextでは、要素を出力するたびに追加のことをすることができます.
  • 例1
  • create()作成
  • subscribe()購読
  • just()
  • from()はjustと同様にオペレータを作成しますが、fromオペレータは少し強くなります.fromオペレータは、入力された配列やIterableを特定のオブジェクトに分割して順次送信する役割を果たすからです.
  • // TODO: 2016/12/16        observerable
    Observable observable = Observable.create(new Observable.OnSubscribe() {      
    
        @Override
        public void call(Subscriber super String> subscriber) {            
    
            subscriber.onNext("111"); 
            subscriber.onNext("222");
            subscriber.onNext("333");
            subscriber.onNext("444");
            subscriber.onCompleted();
        }});
     //// TODO: 2016/12/16    just()   from()
    Observable.just("111", "222", "333");
    Observable.from(new String[]{"111", "222", "333"});
    
    // TODO: 2016/12/16            
    Observable.from(new String[]{"1", "2", "3"}).subscribe(new Action1() {    @Override
        public void call(String s) { 
           DebugLog.i(s + "====="); 
       }});
    
    
    
    class Course { 
       String name = "";
        public Course(String name) {        this.name = name;    } 
       public String getCourse() {        return " china  " + name;    }
    }
    class Student {    
    String name = ""; 
       Course course[]; 
       public Student(String name) {
            this.name = name;
            course = new Course[]{new Course(getName()), new Course(getName()), new Course(getName()), new Course(getName())};  
      }  
      public String getName() {        return name;    }
    }
    Student[] students = new Student[]{new Student("zhangsan"), new Student("lisi"), new Student("wangwu"), new Student("maliu")};
    
    // TODO: 2016/12/16  flatmap   
    Observer observer = new Observer() {
        @Override
        public void onCompleted() { 
       }    
    @Override  
      public void onError(Throwable e) { 
       }
        @Override 
       public void onNext(Course course) {   
         DebugLog.i(course.name + "====");
        }
    };
    
    
    Observable.from(students).flatMap(new Func1>() {   
     @Override
      public Observable call(Student student) { 
           return Observable.from(student.course);    }})
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(observer);
    
    // TODO: 2016/12/16 lift   integer     string
    
    observable.lift(new Observable.Operator() {
        @Override
        public Subscriber super Integer> call(final Subscriber super String> subscriber) {   
         return new Subscriber() {   
             @Override 
               public void onCompleted() { 
                   subscriber.onCompleted();
                }           
             @Override  
              public void onError(Throwable e) {
                    subscriber.onError(e); 
               }            
            @Override   
             public void onNext(Integer integer) {
                    subscriber.onNext(integer + "============="); 
    
               }     
       };   
     }
    });
    
    

    例2
    map()プロパティ:
  • Observableオブジェクトが返すタイプを返す必要はありません.mapオペレータを使用して、新しいデータ型を発行するobservableオブジェクトを返すことができます.
  • は、1つのObservableに対してmap
  • を複数回使用することができる.
    Observable.just("Hellp Map Operator")
    .map(new Func1() {
     @Override
     public Integer call(String s) { 
    return 2015;//     map  Integer
     }
    }).map(new Func1() { 
    @Override
     public String call(Integer integer) {
     return String.valueOf(integer);//      map  String
     }
    }).subscribe(new Action1() {
     @Override
     public void call(String s) {
     System.out.println(s);
     }
    });
    
    

    例3
    Mapは一対一の変換ですが、一対多の変換はありますか?もちろん、現在説明されているFlatMap FlatMapオペレータは、元のObservableから送信された各データに対して指定された関数を使用して変換操作を実行します.この関数は、自身もデータを送信したObservableを返し、FlatMapはこれらのObservablesから送信されたデータをマージし、最後にマージされた結果を独自のデータシーケンスとして送信します.
    private final String url1 = "http://www.iamxiarui.com/wp-content/uploads/2016/06/  .png";
    private final String url2 = "http://www.iamxiarui.com/wp-content/uploads/2016/06/          .png";
    private final String url3 = "http://www.iamxiarui.com/wp-content/uploads/2016/05/cropped-iamxiarui.com_2016-05-05_14-42-31.jpg";
    private final String url4 = "http://www.iamxiarui.com/wp-content/uploads/2016/05/  .png";
    //  Url  private final String[] urls = new String[]{url1, url2, url3, url4};
    

    次にflatmapの処理方法を見てみましょう.
    //   String   UrlObservable.from(urls) .flatMap(new Func1>() {
     @Override 
    public Observable call(String s) { 
    return Observable.just(s); } })
    .map(new Func1() { 
    @Override
     public Bitmap call(String s) { 
    //  Map   Bitmap      
     return GetBitmapForURL.getBitmap(s);
     } }) 
    .subscribeOn(Schedulers.io()) //   subscribe()   IO   .observeOn(AndroidSchedulers.mainThread()) //   Subscriber      UI   //    ,        Bitmap,   String .subscribe(new Action1() { 
    @Override
     public void call(Bitmap bitmap) { mainImageView.setImageBitmap(bitmap); mainProgressBar.setVisibility(View.GONE); 
    }
    });