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