RxJava的concat操作符

来源:https://www.cnblogs.com/tangZH/archive/2019/12/23/12088332.html
-Advertisement-
Play Games

更多文章請點擊:http://77blogs.com/?p=170 轉載請標明出處:https://www.cnblogs.com/tangZH/p/12088332.html,http://77blogs.com/?p=170 使用場景一: 現在要執行兩個任務: 1、輸出字元串0 2、輸出字元串1 ...


更多文章請點擊http://77blogs.com/?p=170

轉載請標明出處:https://www.cnblogs.com/tangZH/p/12088332.htmlhttp://77blogs.com/?p=170

 

使用場景一:

現在要執行兩個任務:

1、輸出字元串0

2、輸出字元串1

我們就可以使用concat來實現多個數據源。

1、輸出字元串0的數據源:

        Observable observableLocal = Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter emitter) throws Exception {
                emitter.onNext("0");
                emitter.onComplete();
            }
        }).subscribeOn(Schedulers.io());

2、輸出字元串1的數據源:

        Observable observableNet = Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter emitter) throws Exception {
                emitter.onNext("1");
                emitter.onComplete();
            }
        }).subscribeOn(Schedulers.io());

3、接收多個數據源:

        Observable.concat(observableLocal, observableNet)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Object o) throws Exception {
                        Log.d(TAG, (String) o);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Log.d(TAG, throwable.getMessage());
                    }
                });
    }

可以看到Log:

12-23 20:23:48.771 23643-23643/com.status.rxjavasample D/RxJavaHelper: 0
12-23 20:23:48.771 23643-23643/com.status.rxjavasample D/RxJavaHelper: 1

兩個字元串都輸出了,而且是有序的。

 

使用場景二、

獲取數據,如果從本地緩存中獲取得到數據,那麼便不從網路獲取,否則從網路獲取。

我們將上面的1,2兩個步驟分別當成從本地緩存獲取數據和從網路緩存中獲取數據,那麼我們需要改變上面的3步驟。

        Observable.concat(observableLocal, observableNet)
                .firstElement()
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Object o) throws Exception {
                        Log.d(TAG, (String) o);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Log.d(TAG, throwable.getMessage());
                    }
                });
    }

唯一不同的是加上.firstElement()。

輸出的log為:

12-23 20:29:11.731 24458-24458/com.status.rxjavasample D/RxJavaHelper: 0

firstElement操作符:按照順序依次遍歷被觀察者中事件,事件不為空,則停止遍歷。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文章主要是用來索引,分散式系統中相關的鏈接: http://sortbenchmark.org/ 保持更新,資源來源自網路;更多內容請關註 cnblogs.com/xuyaowen; ...
  • 保護模式下三個重要的系統表——GDT、LDT和IDT 這裡主要是解釋中斷描述符表 中斷描述符表IDT將每個異常或中斷向量分別與它們的處理過程聯繫起來。與GDT和LDT表類似,IDT也是由8位元組長描述符組成的一個數組。與GDT不同的是,表中第一項可以包含描述符。為了構成IDT表中的一個索引值,處理器把 ...
  • -- BI EMAIL declare @CC varchar(10),@MAIL varchar(500), @str varchar(800),@year varchar(4),@month varchar(2);declare @file_name varchar(50);declare @m ...
  • 大數據開發獨攬大權 大數據技術很早就在BAT這些公司生根發芽,但直到14、15年大數據技術才廣泛應用在各大互聯網公司,大數據技術由此深入各行各業。 此時大數據開發人才非常緊缺,很多公司大數據從立項,到大數據平臺構建,到項目整個流程開發,到後期大數據項目的運維,都是由大數據開發人員一手完成(此時少有專 ...
  • MySQL簡介:MySQL是開源免費的資料庫,小型的資料庫.已經被Oracle收購了.MySQL5.5版本之後都是由Oracle發佈的版本,MySQL之前被SUN公司收購,而SUN公司現在又被Oracle公司收購,所以現在MySQL也是屬於Oracle旗下的一款產品。 1.什麼是MySQL? 維基百 ...
  • JDBC核心技術 講師:宋紅康 微博:尚矽谷 宋紅康 第1章:JDBC概述 1.1 數據的持久化 持久化(persistence): 把數據保存到可掉電式存儲設備中以供之後使用 。大多數情況下,特別是企業級應用, 數據持久化意味著將記憶體中的數據保存到硬碟 上加以”固化” ,而持久化的實現過程大多通過 ...
  • 一、GraphQL簡介 1、什麼是GraphQL? GraphQL官網:https://graphql.org/,這個是英文的,https://graphql.js.cool/這個是中文的。 GraphQL是一種用於API的查詢語言。GraphQL 既是一種用於 API 的查詢語言也是一個滿足你數據 ...
  • 第一章:熟悉 第1條:瞭解 語言的起源 第2條:在類的頭文件中儘量少引入其他頭文件 背景: 使用 可以引入其他文件的所有介面細節。 問題: 1. .h頭文件中,在編譯一個使用了某類的文件時,不需要知道這個類的全部細節,只需要知道有這個類就好。 2. A頭文件中引入B頭文件,C頭文件引入A頭文件,就會 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...