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

鍍金池/ 教程/ Android/ combineLatest
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)式擴(kuò)展
與REST無縫結(jié)合-RxJava和Retrofit
First and last
RxJava Essentials 中文翻譯版
Switch
ElementAt
總結(jié)
總結(jié)
總結(jié)
Sampling
SubscribeOn and ObserveOn
Subject = Observable + Observer

combineLatest

RxJava的combineLatest()函數(shù)有點像zip()函數(shù)的特殊形式。正如我們已經(jīng)學(xué)習(xí)的,zip()作用于最近未打包的兩個Observables。相反,combineLatest()作用于最近發(fā)射的數(shù)據(jù)項:如果Observable1發(fā)射了A并且Observable2發(fā)射了B和C,combineLatest()將會分組處理AB和AC,如下圖所示:

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

combineLatest()函數(shù)接受二到九個Observable作為參數(shù),如果有需要的話或者單個Observables列表作為參數(shù)。

從之前的例子中把loadList()函數(shù)借用過來,我們可以修改一下來用于combineLatest()實現(xiàn)“真實世界”這個例子:

private void loadList(List<AppInfo> apps) {
    mRecyclerView.setVisibility(View.VISIBLE);
    Observable<AppInfo> appsSequence = Observable.interval(1000, TimeUnit.MILLISECONDS)
              .map(position ->apps.get(position.intValue()));
    Observable<Long> tictoc = Observable.interval(1500, TimeUnit.MILLISECONDS);
    Observable.combineLatest(appsSequence, tictoc,
               this::updateTitle)
       .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);
        } 
    });
}

這我們使用了兩個Observables:一個是每秒鐘從我們已安裝的應(yīng)用列表發(fā)射一個App數(shù)據(jù),第二個是每隔1.5秒發(fā)射一個Long型整數(shù)。我們將他們結(jié)合起來并執(zhí)行updateTitle()函數(shù),結(jié)果如下:

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

正如你看到的,由于不同的時間間隔,AppInfo對象如我們所預(yù)料的那樣有時候會重復(fù)。

上一篇:Skip and SkipLast下一篇:總結(jié)