RxJava的學習之創建操作符

1、create操作符

    使用Create操作符從頭開始創建一個Observable,給這個操作符傳遞一個接受觀察者作爲參數的函數,我們需要實現call方法發射一些數據,並恰當的調用觀察者的onNext,onError和onCompleted方法。
create方法默認不在任何特定的調度器上執行。
create操作符是所有創建型操作符的“根”,也就是說其他創建型操作符最後都是通過create操作符來創建Observable的

 Observable.create(new Observable.OnSubscribe<Integer>() {
      @Override public void call(Subscriber<? super Integer> subscriber) {
        for (int i = 0; i < 5; i++) {
          subscriber.onNext(i);
          try {
            Thread.sleep(1000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      }
    }).subscribe(new Action1<Integer>() {
      @Override public void call(Integer integer) {
        Log.d("TAG",String.valueOf(integer));
      }
    });

2、from操作符

(1)定義:將其它種類的對象和數據類型轉換爲Observable
(2)特點:將某個對象轉換爲Observable對象,
然後依次的從對象(可能是Array或Iterable對象)中拿取數據,一個一個的發送。
(3)數據格式如下5種形式:
    from(array)
    from(Iterable)
    from(Future)
    from(Future,Scheduler)
    from(Future,timeout, timeUnit)

代碼示例:

  public void from(){
    String str[]={"one","two","three","four"};
    Observable.from(str).subscribe(new Subscriber<String>() {
      @Override public void onCompleted() {
        Log.d("TAG","發送完成");
      }

      @Override public void onError(Throwable e) {

      }

      @Override public void onNext(String s) {
        Log.d("TAG",s);
      }
    });
  }

這裏寫圖片描述

3、just操作符

(1)定義:Just將單個數據轉換爲發射那個數據的Observable,創建一個發射指定值的Observable
(2)介紹:
Just將單個數據轉換爲發射那個數據的Observable,創建一個發射指定值的Observable。
Just類似於From,但是From會將數組或Iterable的素具取出然後逐個發射,而Just只是簡單的原樣發射,
將數組或Iterable當做單個數據。
如果需要空Observable你應該使用Empty操作RxJava將這個操作符實現爲just函數,它接受一至十個參數,
返回一個按參數列表順序發射這些數據的Observable。
如果看它的源碼的話,你會發現其實它是對from的封裝,他調用的還是from。
源碼:
  public static <T> Observable<T> just(T t1, T t2) {
        return from((T[])new Object[] { t1, t2 });
    }

代碼示例:

 Observable.just("one","two","three","four").subscribe(new Subscriber<String>() {
      @Override public void onCompleted() {
        Log.d("TAG","發送完成");
      }

      @Override public void onError(Throwable e) {

      }

      @Override public void onNext(String s) {
        Log.d("TAG",s);
      }
    });
 List<String> list = new ArrayList<>();
    list.add("one");
    list.add("two");
    list.add("three");
    list.add("four");
    Observable.just(list).subscribe(new Subscriber<List<String>>() {
      @Override public void onCompleted() {
        Log.d("TAG","發送完成");
      }

      @Override public void onError(Throwable e) {

      }

      @Override public void onNext(List<String> list) {
        Log.d("TAG",list.toString());
      }
    });

這裏寫圖片描述

4、range操作符

(1)range操作符發射一個範圍內的有序整數序列,你可以指定範圍的起始和長度。
(2)range有兩個參數,第一參數是起始的位置,第二個參數是要輸出的個數,
    兩個參數都是整型數據。一般可以結合Iterable對象和數組使用。

代碼示例:

final List<String> list = new ArrayList<>();
    list.add("one");
    list.add("two");
    list.add("three");
    list.add("four");
    Observable.range(0,2).subscribe(new Subscriber<Integer>() {
      @Override public void onCompleted() {
          Log.d("TAG","發送完成");
      }

      @Override public void onError(Throwable e) {

      }

      @Override public void onNext(Integer integer) {
          Log.d("TAG",list.get(integer));
      }
    });

這裏寫圖片描述

當然創建操作符不止這些,我只是列舉出一些比較常用的操作符,想要了解更多的操作符,點擊這裏。可能寫的不是很好,若有問題,歡迎在評論下方提意見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章