在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Merge
combineLatest
從列表創(chuàng)建一個Observable
RxJava的與眾不同之處
Schedulers
RxJava觀察者模式工具包
總結(jié)
工具
你什么時候使用觀察者模式?
GroupBy
App架構(gòu)
組合Observables
創(chuàng)建Activity類
StartWith
RX - 從.NET到RxJava
處理耗時的任務(wù)
過濾Observables
向響應(yīng)式世界問好
避免阻塞I/O的操作
Join
有且僅有一次
Schedulers-解決Android主線程問題
轉(zhuǎn)換Observables
啟動引擎
我們的第一個Observable
總結(jié)
StrictMode
Debounce
*map家族
創(chuàng)建RecyclerView Adapter
為什么是Observables?
Merge
再多幾個例子
總結(jié)
Buffer
Window
總結(jié)
Timeout
執(zhí)行網(wǎng)絡(luò)任務(wù)
項目目標(biāo)
來到Java世界 - Netflix RxJava
獲取我們需要的數(shù)據(jù)
Observable
過濾序列
非阻塞I/O操作
ZIP
總結(jié)
And,Then和When
觀察者模式
Retrofit
Cast
Skip and SkipLast
微軟響應(yīng)式擴展
與REST無縫結(jié)合-RxJava和Retrofit
First and last
RxJava Essentials 中文翻譯版
Switch
ElementAt
總結(jié)
總結(jié)
總結(jié)
Sampling
SubscribeOn and ObserveOn
Subject = Observable + Observer

Merge

在”異步的世界“中經(jīng)常會創(chuàng)建這樣的場景,我們有多個來源但是又只想有一個結(jié)果:多輸入,單輸出。RxJava的merge()方法將幫助你把兩個甚至更多的Observables合并到他們發(fā)射的數(shù)據(jù)項里。下圖給出了把兩個序列合并在一個最終發(fā)射的Observable。

http://wiki.jikexueyuan.com/project/rxjava/images/chapter6_1.png" alt="" />

正如你看到的那樣,發(fā)射的數(shù)據(jù)被交叉合并到一個Observable里面。注意如果你同步的合并Observable,它們將連接在一起并且不會交叉。

像往常一樣,我們用我們的App和已安裝的App列表來創(chuàng)建了一個“真實世界”的例子。為此我們還需要第二個Observable。我們可以創(chuàng)建一個單獨的應(yīng)用列表然后讓它逆序排列。當(dāng)然這沒有實際的意義,只是為了這個例子。對于第二個列表,我們的loadList()函數(shù)像下面這樣:

private void loadList(List<AppInfo> apps) {
    mRecyclerView.setVisibility(View.VISIBLE);
    List reversedApps = Lists.reverse(apps);
    Observable<AppInfo> observableApps =Observable.from(apps);
    Observable<AppInfo> observableReversedApps =Observable.from(reversedApps);
    Observable<AppInfo> mergedObserbable = Observable.merge(observableApps,observableReversedApps);

    mergedObserbable.subscribe(new Observer<AppInfo>(){
        @Override
        public void onCompleted() {
            mSwipeRefreshLayout.setRefreshing(false);
            Toast.makeText(getActivity(), "Here is the list!", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(Throwable e) {
            Toast.makeText(getActivity(), "One of the two Observable threw an error!", Toast.LENGTH_SHORT).show();
            mSwipeRefreshLayout.setRefreshing(false);
        }

        @Override
        public void onNext(AppInfoappInfo) {
            mAddedApps.add(appInfo);
            mAdapter.addApplication(mAddedApps.size() - 1, appInfo);
        } 
    });
}

我們創(chuàng)建了Observable和observableApps數(shù)據(jù)項以及新的observableReversedApps逆序列表。使用Observable.merge(),我們可以創(chuàng)建新的Observable MergedObservable,它在單個可觀測序列中發(fā)射源Observables發(fā)出的所有數(shù)據(jù)。

正如你能看到的,每個方法簽名都是一樣的,因此我們的觀察者無需在意任何不同就可以復(fù)用代碼。結(jié)果如下: http://wiki.jikexueyuan.com/project/rxjava/images/chapter6_2.png" alt="" />

注意錯誤時的toast消息,你可以認(rèn)為每個Observable拋出的錯誤都將會打斷合并。如果你需要避免這種情況,RxJava提供了mergeDelayError(),它能從一個Observable中繼續(xù)發(fā)射數(shù)據(jù)即便是其中有一個拋出了錯誤。當(dāng)所有的Observables都完成時,mergeDelayError()將會發(fā)射onError(),如下圖所示:

http://wiki.jikexueyuan.com/project/rxjava/images/chapter6_3.png" alt="" />

上一篇:RX - 從.NET到RxJava下一篇:總結(jié)