本文由做者 KunMinX 原創,與 7 萬進階讀者共同向上生長 🔥java
本文最初是爲部門內部培訓而準備的,但通過一番調研發現,同事們用不慣 RxJava,並非由於網上介紹 「怎麼用」 的教程不夠多,偏偏是由於,一上來就急着發車的教程無數、卻從未有過哪篇教程 捨得用幾句話的功夫點破 RxJava 操做符究竟爲什麼方神聖、咱們爲何要用、爲何要那樣用。數據庫
Observable.just(1, 3, 5, 7, 9)
.map(i -> i + 1)
.filter(i -> i < 5)
.subscribe(getObserve());
複製代碼
事實上,在至關長的一段時間裏,我也和大部分人同樣,只知道使用 RxJava 來完成異步回調,至於那些操做符,則是能不用盡可能不用,由於不知道葫蘆裏賣的什麼藥,看不懂、不會用。編程
所以,本文的初衷毫不是翻譯官方文檔、教你們怎麼用,而是旨在幫助你們對 RxJava 操做符 完成感性上的認識。鑑於本次培訓的效果還不錯、同事們聽了都說好,我便在 GitHub 開源了全套操做符示例代碼(不要慌,連接文末已給出)。若是你在閱讀本文後以爲恍然大悟,原來 RxJava 操做符是這麼回事,那麼個人願望也就達到了。異步
我對操做符本質的頓悟,始於我對編程語言的理解。和你同樣,我是作安卓開發,但有一天,我決定跳出 Java,從整個計算機科學的角度來學習和理解編程語言的本質,在這過程當中,我接觸了「編程範式」這個概念,瞭解到原來每一個編程語言大都包含多種編程範式。編程語言
常見的編程範式有:命令式編程、聲明式編程等。post
以 Java 爲例,我們 Java 最主要的編程範式是命令式編程。命令式編程 即按順序執行具體的命令,這些命令不只交待了作什麼,還詳細交待了每一步怎麼作。學習
SQL 也是種編程語言,是一種典型的聲明式編程。聲明式編程的特色是,只交待作什麼,但無須交待怎麼作。spa
下面回到咱們最初的問題上來。你之因此用不慣 RxJava 操做符,是由於你習慣性地使用命令式編程思惟 來理解其實是聲明式編程的操做符。 學習操做符,就和你在大學裏接受的 SQL 語句同樣理所固然。翻譯
SQL 你是理解的,就是按必定的規則,向數據庫中的數據聲明你要作什麼。 3d
同理,RxJava 也是按必定的規則,向數據流聲明你要作什麼。
轉換成代碼,便成爲如下這樣。
Observable.just(1, 3, 5, 7, 9)
.map(i -> i + 1)
.filter(i -> i < 5)
.subscribe(getObserve());
複製代碼
這樣說,你理解了嗎?
GitHub:RxJava 魔法師:學習操做符,就像學習 SQL 😉
看不過癮?這裏只爲你 而準備了一份 簡潔有力的 《重學安卓》認知地圖 😉