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

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

ZIP

在一種新的可能場景中處理多個(gè)數(shù)據(jù)來源時(shí)會(huì)帶來:多從個(gè)Observables接收數(shù)據(jù),處理它們,然后將它們合并成一個(gè)新的可觀測序列來使用。RxJava有一個(gè)特殊的方法可以完成:zip()合并兩個(gè)或者多個(gè)Observables發(fā)射出的數(shù)據(jù)項(xiàng),根據(jù)指定的函數(shù)Func*變換它們,并發(fā)射一個(gè)新值。下圖展示了zip()方法如何處理發(fā)射的“numbers”和“l(fā)etters”然后將它們合并一個(gè)新的數(shù)據(jù)項(xiàng):

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

對(duì)于“真實(shí)世界”的例子來說,我們將使用已安裝的應(yīng)用列表和一個(gè)新的動(dòng)態(tài)的Observable來讓例子變得有點(diǎn)有趣味。

Observable<Long> tictoc = Observable.interval(1, TimeUnit.SECONDS);

tictocObservable變量使用interval()函數(shù)每秒生成一個(gè)Long類型的數(shù)據(jù):雖簡單但有效,正如之前所說的,我們需要一個(gè)Func對(duì)象。因?yàn)樗枰獋鲀蓚€(gè)參數(shù),所以是Func2:

private AppInfo updateTitle(AppInfoappInfo, Long time) {
    appInfo.setName(time + " " + appInfo.getName());
    return appInfo;
}

現(xiàn)在我們的loadList()函數(shù)變成這樣:

private void loadList(List<AppInfo> apps) {
    mRecyclerView.setVisibility(View.VISIBLE);
    Observable<AppInfo> observableApp = Observable.from(apps);

    Observable<Long> tictoc = Observable.interval(1, TimeUnit.SECONDS);

    Observable.zip(observableApp, tictoc,
    (AppInfo appInfo, Long time) -> updateTitle(appInfo, time))
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Observer<AppInfo>() {
        @Override
        public void onCompleted() {
            Toast.makeText(getActivity(), "Here is the list!", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(Throwable e) {
            mSwipeRefreshLayout.setRefreshing(false);
            Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNext(AppInfoappInfo) {
            if (mSwipeRefreshLayout.isRefreshing()) {
                mSwipeRefreshLayout.setRefreshing(false);
            } 
            mAddedApps.add(appInfo);
            int position = mAddedApps.size() - 1;
            mAdapter.addApplication(position, appInfo);
            mRecyclerView.smoothScrollToPosition(position);
        }
    });
}

正如你看到的那樣,zip()函數(shù)有三個(gè)參數(shù):兩個(gè)Observables和一個(gè)Func2

仔細(xì)一看會(huì)發(fā)現(xiàn)observeOn()函數(shù)。它將在下一章中講解:現(xiàn)在我們可以小試一下。

結(jié)果如下:

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