1. 程式人生 > >RxJava操作符:zip資料合併操作

RxJava操作符:zip資料合併操作

https://blog.csdn.net/qq1026291832/article/details/51006451
使用場景:        當某介面內容來源不同,但需同時顯示出來時        eg1:    一部分資料來自本地,一部分來自網路
Observable.zip(
queryContactsFromLocation(),
queryContactsForNet(),
new Func2<List<Contacter>, List<Contacter>, List<Contacter>>() {
@Override
public List<Contacter> call(List<Contacter> contacters, List<Contacter> contacters2) {
contacters.addAll(contacters2);
return contacters;
}
}
).compose(this.<List<Contacter>>bindToLifecycle())
.subscribeOn(Schedulers.io
())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Contacter>>() {
@Override
public void call(List<Contacter> contacters) {
initPage(contacters);
}
});
/**
* 模擬手機本地聯絡人查詢
*/
private Observable<List<Contacter>> queryContactsFromLocation
() {
return Observable.create(new Observable.OnSubscribe<List<Contacter>>() {
@Override
public void call(Subscriber<? super List<Contacter>> subscriber) {

ArrayList<Contacter> contacters = new ArrayList<>();
contacters.add(new Contacter("location:張三"));
contacters.add(new Contacter("location:李四"));
contacters.add(new Contacter("location:王五"));
subscriber.onNext(contacters);
subscriber.onCompleted();
}
});
}
/**
* 模擬網路聯絡人列表
*/
private Observable<List<Contacter>> queryContactsForNet() {
return Observable.create(new Observable.OnSubscribe<List<Contacter>>() {
@Override
public void call(Subscriber<? super List<Contacter>> subscriber) {

try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}

ArrayList<Contacter> contacters = new ArrayList<>();
contacters.add(new Contacter("net:Zeus"));
contacters.add(new Contacter("net:Athena"));
contacters.add(new Contacter("net:Prometheus"));
subscriber.onNext(contacters);
subscriber.onCompleted();
}
});
}
效果如下:            eg2:    當然對於來源不同、型別不同的資料我們也可以使用Zip的,只需將兩種Fun2的call()方法中先暫存起來,最後在訂閱回撥中分離使用即可,常見的應用場所比如下面這個介面。        頂部是Html組成的Web頁面,底部是原生的評論頁面,資料分別來自兩個不同的介面,為了保證介面的完整顯示,在這裡我們可以使用Zip。
Observable.zip(
mArticleProtocol.getNewsDetail(params_detail),
mCommentProtocol.getCommentList(params_comm),
new Func2<ArticleDetailBean, CommentListBean, List>() {
@Override
public List call(ArticleDetailBean articleDetailBean, CommentListBean commentBean) {
List list = new ArrayList();
list.add(articleDetailBean);
list.add(commentBean);
return list;
}
})
.observeOn(AndroidSchedulers.mainThread())
.compose(this.<List>bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(
new Action1<List>() {
@Override
public void call(List list) {
initPage(list);
}
},
new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
mPageLayout.setPageState(PageStateLayout.STATE_ERROR);
}
}
);

相關推薦

RxJava操作符zip資料合併操作

https://blog.csdn.net/qq1026291832/article/details/51006451使用場景:        當某介面內容來源不同,但需同時顯示出來時        eg1:    一部分資料來自本地,一部分來自網路Observable.zi

Android RxJava操作符的學習---組合合併操作符---從磁碟或記憶體快取中獲取快取資料

1. 需求場景     2. 功能說明 對於從磁碟 / 記憶體快取中 獲取快取資料 的功能邏輯如下: 3. 具體實現 詳細請看程式碼註釋 // 該2變數用於模擬記憶體快取 & 磁碟快取中的資料 String me

Android RxJava操作符的學習---組合合併操作符---聯合判斷多個事件

1. 需求場景 需要同時對多個事件進行聯合判斷 如,填寫表單時,需要表單裡所有資訊(姓名、年齡、職業等)都被填寫後,才允許點選 "提交" 按鈕 2. 功能說明 此處採用 填寫表單 作為聯合判斷功能展示 即,表單裡所有資訊(姓名、年齡、職業等)都被填寫後,

Android RxJava操作符的學習---組合合併操作符---合併資料來源並展示

1. 需求場景     2. 功能說明 即,同時向2個數據源獲取資料 -> 合併資料 -> 統一展示到客戶端 3. 具體實現 此處採用Merge() & Zip()操作符進行講解,其中: Merge()例子 :實現較為簡單

Android RxJava操作符的學習---組合 / 合併操作符

3.3 組合 / 合併操作符 3.3.1. 作用 組合 多個被觀察者(Observable) & 合併需要傳送的事件 應用場景 組合多個被觀察者 合併多個事件 傳送事件前追加發送事件 統計傳送事件數量 3.3.

RxJava----操作符輔助操作符

Observable Utility Operators(輔助操作符) delay 顧名思義,Delay操作符就是讓發射資料的時機延後一段時間,這樣所有的資料都會依次延後一段時間發射。 log("start subscrib:"

RxJava操作符(過濾、合併、轉換)

RxJava—過濾、合併、轉換 本來RxJava基礎部分是打算在上個月完成的,專案實在太趕,越發覺得堅持做一件事情,並且要做好這件事情並不是容易的事。這一章將講述RxJava訊息序列的過濾、合併、轉換,也就是RxJava中非常重要的一部分——操作符。

深入淺出RxJava(二操作符)

包含 不想 sub return -m name 這就是 其他 cal 原文地址:http://blog.csdn.net/lzyzsd/article/details/44094895#comments 在第一篇blog中,我介紹了RxJava的一些基礎知識,同時也介

Android RxJava操作符詳解系列 變換操作符

urn 原因 轉換 需要 生產 依賴 reat 入門 所有 Rxjava,由於其基於事件流的鏈式調用、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。Github截圖 如果還不了解 RxJava,請看文章:Android:這是一篇 清晰 &

git操作基礎刪除資料

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

《SQL入門經典》筆記(第五章建立資料庫之操作資料

1. 資料操作語言(DML),用於修改關係型資料庫裡的資料和表。   2. SQL中三個基本的DML命令是: INSERT UPDATE DELETE SELECT(基本查詢命令)可以與DML配合使用。   3. INSERT:

MongDB學習03資料基本操作

文件 組成 集合;集合 組成 資料庫。 文件 如同python中dict. 資料庫操作是使用JavaScript shell進行操作 資料庫操作 檢視所有資料庫 show dbs use 切換資料操作,也是建立資料庫命令 use test 資料庫刪除

資料基礎---《利用Python進行資料分析·第2版》第8章 資料規整聚合、合併和重塑

之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 在許多應用中,資料可能分散在許多檔案或資料庫中,儲存的形式也不利於分析。本章關注可以聚合、合併、重塑資料的方法。 首先

SSM物件資料,實現基本操作

上期 基本配置   package com.cn.model; public class User { private int userId; private String userName; private int userSum; pub

Rxjava - 操作符,執行緒操作的簡單使用

目錄 建立操作符 10種常用的操作符定義 下面做幾個操作符的demo演示 create from repeat defer interval Scheduler 什麼是Sc

Rxjava - 操作符,線程操作的簡單使用

ever 個數 sin rri ply mar ++ put time 目錄 創建操作符 10種常用的操作符定義 下面做幾個操作符的demo演示 create from repeat defer interval Scheduler 什麽是Scheduler? 如何使

資料結構 筆記樹中屬性操作的實現

樹中結點的數目 -定義功能:count(node) ·在node為根結點的樹中統計結點的數目 int count(GTreeNode<T>* node) const { int ret = 0; if(node != NULL)

資料結構字串(堆)——基本操作

資料結構的重要行不言而喻,簡單介紹我在這部分遇到的一些問題,希望對大家有少許幫助。 首先實現的多個操作: 程式碼: #include<stdio.h> #include<stdlib.h> #include<string.h> #defi

Linux基礎02磁碟操作,檔案許可權、檔案及資料操作、網路服務

1.Linux磁碟與U盤操作 1.1 顯示系統的磁碟空間用量 ##du命令也是檢視使用空間的,但是與df命令不同的是Linux du命令是對檔案和目錄磁碟使用的空間的檢視 du -sh ##查目錄使用大小(-s表示總結) ## du -sh /bin ##df命令用於顯示磁碟分割槽

深入淺出RxJava(二操作符)

pub clas 破壞 new 分解 () 調用 script rri 看完這篇blog,我相信你肯定想立即在你的項目中使用RxJava了,這篇blog將介紹許多RxJava中的操作符,RxJava的強大性就來自於它所定義的操作符。首先先看一個例子: 準備工作 假設我有這