Android-RxJava操作符-join

join
任何時候,只要在另一個Observable發射的數據定義的時間窗口內,這個Observable發射了一條數據,就結合兩個Observable發射的數據

join表示形式:
join( ObservableSource<? extends TRight> other,
Function<? super T, ? extends ObservableSource> leftEnd,
Function<? super TRight, ? extends ObservableSource> rightEnd,
BiFunction<? super T, ? super TRight, ? extends R> resultSelector
)

join有四個參數分別表示:
other:需要組合的right Observable;
leftEnd:接收從left Observable發射來的源數據,並返回一個Observable,這個Observable的生命週期決定了left Obsrvable發射出來的數據的有效期;
rightEnd:接收right Observable發射來的數據,並返回一個Observable,這個Observable的生命週期決定了right Obsrvable發射出來的數據的有效期;
resultSelector:接收從left Observable和right Observable發射出來的數據,並將這兩個數據組合;

join操作兩個Observable ,但不能等價看待,join的效果類似於排列組合,
left Observable 作爲基座窗口,根據自己的節奏不斷髮射數據元素,
right Observable,每發射一個數據,我們都把它和left Observable中已經發射的數據進行一對一匹配;

      Observable.just("a", "b")
                .join(Observable.create(emitter -> {
                            for (int i = 0; i < 4; i++) {
                                System.out.println("onNext:----" + i);
                                emitter.onNext(i);
                                //Thread.sleep(1000);
                            }

                        }),
                        s -> {
                            System.out.println("left:----" + s);//a,b
                            //使Observable延遲3000毫秒執行
                            return Observable.timer(3000, TimeUnit.MILLISECONDS);
                        },
                        integer -> {
                            //[0,1,2,3]序列
                            System.out.println("right:---" + integer);
                            //使Observable延遲2000毫秒執行
                            return Observable.timer(2000, TimeUnit.MILLISECONDS);
                        },
                        //結合上面發射的數據
                        (s, integer) -> s +  integer

                ).subscribe(o -> System.out.println("join===========" + o));

參考
(轉載)如何理解RxJava中的join操作

發佈了90 篇原創文章 · 獲贊 22 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章