1. 程式人生 > >Rxjava2.x 原始碼分析,Map操作符原始碼分析(二)

Rxjava2.x 原始碼分析,Map操作符原始碼分析(二)

首先看一個小例子:

  Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
//                e.onNext("1024");
//                e.onComplete();
            }
        }).map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) throws Exception {
                return Integer.parseInt(s);
            }
        }).map(new Function<Integer, Float>() {
            @Override
            public Float apply(Integer integer) throws Exception {
                return Float.parseFloat(String.valueOf(integer));
            }
        }).subscribe(new Observer<Float>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.e(TAG, "onSubscribe: =============ddddd" );
            }

            @Override
            public void onNext(Float integer) {
                Log.e(TAG, "onNext: ======>>"+integer );
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {


            }
        });

Observable.create->獲得ObservableCreate(將ObservableOnSubscribe傳進來賦值給source)物件
 ->map(獲得ObservableMap物件(把ObservableCreate物件穿進來,賦值給當前ObservableMap 的source) 我們暫且叫該物件為map1)
 ->map(獲得ObservableMap物件(把bservableMap物件穿進來,賦值給當前ObservableMap 的source),我們暫且叫該物件為map2)
 ->subscribe()
 ->map2物件的subscribe,(ObservableMap中 subscribe方法是層層往上呼叫的  source.subscribe(new MapObserver<T, U>(t, function));
 同時將素MainActivity subscribe 中new 的Observer 賦值給MapObserver這樣層層往上賦值,最終,ObservableCreate中的Observer 是從map1中new的MapObserver穿進來的
-> map1物件的subscribe
-> ObservableCreate物件的 subscribe方法,
->上游事件開始層層往下呼叫,最後最上游的 Observable 肯定會呼叫 onNext 方法,這樣遞迴往下游就會來到包裹好的 MapObserver 中的 onNext 方法,
 在這裡我們看到了 function.apply(item) 進行轉換處理,然後接著往下傳遞,最終就會來到 Observer 的 onNext 方法。
 

相關推薦

Rxjava2.x 原始碼分析Map操作符原始碼分析

首先看一個小例子: Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(Observa

從壹開始微服務 [ DDD ] 之十一 ║ 基於原始碼分析命令分發的過程

緣起 哈嘍小夥伴週三好,老張又來啦,DDD領域驅動設計的第二個D也快說完了,下一個系列我也在考慮之中,是 Id4 還是 Dockers 還沒有想好,甚至昨天我還想,下一步是不是可以寫一個簡單的Angular 入門教程,本來是想來個前後端分離的教學視訊的,簡單試了試,發現自己的聲音不好聽,真心不好聽那種,就作

Rxjava2.x 原始碼分析以及手動實現Rxjava

這兩年Rxjava火的一塌糊塗,不會點Rxjava+Okhttp+Retrofit+MVP+Dagger2架構都不好意思說自己混Android的。Rxjava 到底是什麼和Rxjava到底怎麼用,這裡就不講了,網上太多了,具體可以參考 這位大佬 和扔物線的。  Rxjava

Spring原始碼解析一步一步分析springMVC專案啟動過程

 springMVC專案啟動過程,分析原始碼。1、環境搭建,這步我就省略細節,只把我的大概環境說下:windows 7 、jdk 8、maven-3.3.9、tomcat 8.5.11、IDEA 2017.1 x64版 具體環境安裝,我就略過,可自行google、baidu安

【spring原始碼分析】IOC容器初始化

前言:在【spring原始碼分析】IOC容器初始化(一)中已經分析了匯入bean階段,本篇接著分析bean解析階段。 1.解析bean程式呼叫鏈 同樣,先給出解析bean的程式呼叫鏈: 根據程式呼叫鏈,整理出在解析bean過程中主要涉及的類和相關方法。 2.解析bean原始碼分

Java原始碼分析——java.util工具包解析——HashSet、TreeSet、LinkedHashSet類解析

    Set,即集合,與數學上的定義一樣,集合具有三個特點: 無序性:一個集合中,每個元素的地位都是相同的,元素之間是無序的。 互異性:一個集合中,任何兩個元素都認為是不相同的,即每個元素只能出現一次。 確定性:給定一個集

Spark core原始碼分析之spark叢集的啟動

2.2 Worker的啟動 org.apache.spark.deploy.worker 1 從Worker的伴生物件的main方法進入 在main方法中首先是得到一個SparkConf例項conf,然後將conf和啟動Worker傳入的引數封裝得到Wor

springMVC原始碼分析--HandlerInterceptor攔截器呼叫過程

在上一篇部落格springMVC原始碼分析--HandlerInterceptor攔截器(一)中我們介紹了HandlerInterceptor攔截器相關的內容,瞭解到了HandlerInterceptor提供的三個介面方法:(1)preHandle: 在執行controlle

spark mllib原始碼分析之隨機森林(Random Forest)

4. 特徵處理 這部分主要在DecisionTree.scala的findSplitsBins函式,將所有特徵封裝成Split,然後裝箱Bin。首先對split和bin的結構進行說明 4.1. 資料結構 4.1.1. Split cl

spring原始碼學習之路---IOC實現原理

上一章我們已經初步認識了BeanFactory和BeanDefinition,一個是IOC的核心工廠介面,一個是IOC的bean定義介面,上章提到說我們無法讓BeanFactory持有一個Map package org.springframework.beans.factory.supp

Spring原始碼解讀之Spring MVC HandlerMapping元件

一、HandlerMapping HandlerMapping作用是根據request找到相應的處理器Handler和Interceptors,並將Handler和Interceptors封裝成HandlerExecutionChain 物件返回。Handler

Uboot中start.S原始碼的指令級的詳盡解析

2.2. Uboot中的記憶體的Layout 總結了start.S做的事情之後,另外想在此總結一下,uboot中,初始化部分的程式碼執行後,對應的記憶體空間,都是如何規劃,什麼地方放置了什麼內容。此部分內容,雖然和start.S沒有直接的關係,但是start.S中,堆疊sp的計算等,也和這部分

springMVC原始碼解析--ViewResolverComposite檢視解析器集合

上一篇部落格 springMVC原始碼分析--ViewResolver檢視解析器(一)中我們介紹了一些springMVC提供的很多檢視解析器ViewResolver,在開發的一套springMVC系統中是可以使用多個檢視的,當然就需要配置多個檢視解析器了,ViewResolv

利用MAT分析JVM記憶體問題從入門到精通

上一篇文章MAT入門到精通(一)介紹了MAT的使用場景和基本概念,這篇文章開始介紹MAT的基本功能,後面還有兩篇,一篇是MAT的高階功能,另一篇是MAT實戰案例分析。 三、歡迎頁 使用MAT開啟一個heap dump檔案,解析完成後,預設會進入歡迎頁,歡迎頁裡包含了一些常見的分析:最大記憶體佔用分析、常見的分

讀SDWebImage原始碼第二天的收穫與思考

4.如果找到了就直接顯示給當前檢視,如果沒有找到就就去通過操作佇列進行下載。 那麼接下來我們看一下是如何下載的? 思考? 如果不做

springboot原始碼解析-管中窺豹系列之專案型別

# 一、前言 - Springboot原始碼解析是一件大工程,逐行逐句的去研究程式碼,會很枯燥,也不容易堅持下去。 - 我們不追求大而全,而是試著每次去研究一個小知識點,最終聚沙成塔,這就是我們的springboot原始碼管中窺豹系列。 ![ 簡介 ](https://zhangbin1989.gitee.

mongodb3.4.4安裝副本集wt引擎配置優化

記錄 空間 今天大概研究下wiredtiger引擎,mongo從3.0開始引入,主要為了解決吃內存多,占用大量磁盤空間的問題,其實即使用了wt引擎,在性能上還是比tokuft要差,但是tokuft 在功能上代碼叠代的太慢,退而求其次大家還是用了mongo,首先3.0的時候默認還是mmapv1 引擎,所

需求分析與數據庫設計

-s size spa blog png 設計 需求分析 技術 詳細 需求分析: 作為一名觀眾, 我希望知道詳細的隊伍比分變化和隊伍得分信息, 以便於了解比賽信息和運動員的精彩得分 用例圖: 數據庫設計: 用mvc中自帶的 數據庫SQL Server

基於httpd-2.2和httpd-2.4配置虛擬主機web站點並提供https服務

基於主機名配置虛擬主機web站點 使用httpd-2.2和httpd-2.4實現> 1.建立httpd服務,要求:> 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; > 2) 通過www1的/server-status提供狀態信息,且僅允

基於httpd-2.4配置虛擬主機web站點並提供https服務

基於主機名配置虛擬主機web站點 為虛擬主機站點提供https服務 使用httpd-2.2和httpd-2.4實現> 1.建立httpd服務,要求:> 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; > 2) 通過www1的/s