RxJava操做符compose 筆記<二十四>

Rx經過連接它們而不是嵌套它們,具備應用運算符的特定樣式。此樣式並不罕見,這對於不可變對象更有意義,甚至能夠在標準Java特性中找到它,例如字符串:String s = new String(「Hi」).toLowerCase().replace('a','c');此樣式容許您按照應用順序查看修改,而且在使用大量運算符時它也看起來更整潔。java

理想狀況下,您但願您的Rx運算符與其餘運算符同樣適合鏈:ios

許多語言都有支持這種方法的方法。不方便的是,Java沒有。您必須編輯Observable自己才能添加本身的方法。沒有必要要求RxJava團隊將您的想法添加到操做集中,由於已經有這麼多,RxJava團隊對於添加另外一個操做符是保守的。你能夠擴展Observable並在那裏添加你本身的運算符。在這種狀況下,您將沒法再共享和組合運算符庫。git

有一種方法可使用compose方法將自定義操做符擬合到鏈中。github

啊哈!Transformer(變形金剛)接口!Transformer <T,R>實際上只是Func1 <Observable <T>,Observable <R >>接口的別名。這是一個採用Observable <T>並返回Observable <R>的方法,就像咱們爲計算運行平均值所作的那樣。函數

Java不容許您僅經過名稱引用函數,所以咱們假設自定義運算符在咱們的Main類中。咱們能夠看到,如今咱們的操做徹底適合鏈條,儘管首先調用compose的樣板。爲了更好的封裝,您應該在一個新類中實現Observable.Transformer,並將整個實現與其輔助類一塊兒移出視線。orm

咱們就像這樣使用它對象

大多數Rx運算符都是可參數化的。咱們也能夠這樣作。讓咱們擴展運算符的功能,能夠忽略超過某個閾值的值。blog

咱們剛剛將參數做爲字段添加到運算符中,爲咱們覆蓋的用途添加了構造函數,並在咱們的Rx操做中使用了該參數。如今咱們能夠作source.compose(new RunningAverage(5)),理想狀況下,咱們將調用source.runningAverage(5)。Rx是一個功能範例,但Java仍然主要是面向對象的語言,而且至關保守。接口

您能夠在此處獲取此示例運算符的完整示例(here)。字符串

下節再續!

原文:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/7.%20Custom%20operators.md

有什麼討論的內容,能夠加我公衆號:

相關文章
相關標籤/搜索