RxJava操作符:zip資料合併操作
使用場景: 當某介面內容來源不同,但需同時顯示出來時 eg1: 一部分資料來自本地,一部分來自網路
Observable.zip(
queryContactsFromLocation(),
queryContactsForNet(),
new Func2<List<Contacter>, List<Contacter>, List<Contacter>>() {
@Overridepublic 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();
}
});
}
/**效果如下: eg2: 當然對於來源不同、型別不同的資料我們也可以使用Zip的,只需將兩種Fun2的call()方法中先暫存起來,最後在訂閱回撥中分離使用即可,常見的應用場所比如下面這個介面。 頂部是Html組成的Web頁面,底部是原生的評論頁面,資料分別來自兩個不同的介面,為了保證介面的完整顯示,在這裡我們可以使用Zip。
* 模擬網路聯絡人列表
*/
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();
}
});
}
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的強大性就來自於它所定義的操作符。首先先看一個例子: 準備工作 假設我有這