RxJava學習(10):複用與join

weixin_34279579發表於2018-06-14

前言

根據Froussios英文版的學習筆記。

開發的時候,發現流的轉換等部分操作一模一樣,此時該如何複用呢?如果發現流的訂閱部分操作一模一樣,此時又該如何呢?

一、compose與lift

compose轉換一個observable為另一個observable,但是lift則是對Subscriber進行更改。

public <R> Observable<R> compose(Observable.Transformer<? super T,? extends R> transformer)

 public final <R> Observable<R> lift(ObservableOperator<? extends R, ? super T> lifter)
 @Test
    public void a() {
        Observable.just(1).compose(transform()).subscribe(System.out::println);
        Observable.just(2).lift(operator()).subscribe(System.out::println);
    }


    @NonNull
    private ObservableTransformer<Integer, String> transform() {
        return upstream -> upstream.map(integer -> "我是第" + integer + "名");
    }


    @NonNull
    private ObservableOperator<String, Integer> operator() {
        return observer -> new Observer<Integer>(){

            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Integer integer) {
                observer.onNext("我是第" + integer + "名");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        };
    }
schedulers
  1. immediate :當前執行緒立刻開始
  2. trampoline:當前執行緒按照佇列順序執行
  3. newThread :每一個work新建一個執行緒
  4. computation:CPU工作
  5. io:IO操作
join

join和zip的區別

zip按順序結合兩個或多個Observables發射的資料項,然後它發射這個函式返回的結果。它按照嚴格的順序應用這個函式。它只發射與發射資料項最少的那個Observable一樣多的資料。
join則是在任何時候,只要在另一個Observable發射的資料定義的時間視窗內,這個Observable發射了一條資料,就結合兩個Observable發射的資料。

3679520-5eef888e898983d8.png
zip
3679520-9117c4c68fc24a7f.png
join

相關文章