RxJava 學習筆記<十六> zip和Comoninelatest操做符

 

 

 

    到目前爲止,咱們已經看到了一些運算符,它們以某種方式將多個序列壓扁爲同一類型。接下來的運算符將源序列並排放置,並使用這些值來建立複合值。java

zip

    zip是函數式編程中的一個很是基本的函數。它須要兩個或多個序列,並按索引將它們的值一對一地匹配起來。須要一個函數來組合這些值。與您對其餘環境的指望不一樣,在RxJavazip中,默認狀況下不會將全部值組合在一個元組中。ios

    在下一個示例中,咱們有兩個源,它們以不一樣的速率發出項。git

日誌輸出:github

    若是我把right改爲300毫秒,能夠看到另外一半默默地等待編程

    如咱們所見,zip基於索引匹配值。函數式編程

    zip有多個重載,用於將兩個以上的序列壓縮在一塊兒。
函數

    當壓縮兩個以上的序列時,運算符將等待全部源發出下一個值,而後再發出下一個壓縮值。在下一個示例中,咱們再次添加具備本身頻率的另外一個源。spa

日誌輸出:3d

    壓縮序列在任何源序列成功終止時終止。其餘序列的進一步值將被忽略。咱們能夠在下一個示例中看到這一點,其中咱們壓縮了不一樣大小的序列,並計算了壓縮序列中的元素。日誌

日誌輸出:

    壓縮序列包含的元素與最短的源序列同樣多。

    另外還有zipWith操做符,這是zip序列的另外一種樣式。zipWith容許您在一個鏈中壓縮,但它可能不方便壓縮兩個以上的序列。

日誌輸出:

    zipWith還具備一個重載,容許您將可觀察到sequence壓縮爲一個可迭代的序列。

日誌輸出:

combineLatest

    在zip使用索引的地方,cominelatest將使用時間。每當一個被組合的觀測值發出一個值時,該值與另外一個可觀察到的最新值組合在一塊兒。一樣,須要一個函數來組合這些值。

日誌輸出:

    如咱們所見,CompineLateest首先它等待每一個序列都有一個值。在此以後,由任何一個可觀察到的值發出的每個值都會致使一個組合值被釋放。

    就像咱們在本章中看到的每一個Combinator同樣,存在容許組合兩個以上序列的重載。

    喜歡把Comoninelatest看做是一個事件發生在另外一個事件的上下文中,當使用來自GUI的輸入(多個有狀態GUI控件影響相同的輸出)時,Comoninelatest很是有用。想象一下,一個文本輸入字段,一個與文本相呼應的段落,以及一個標記是否大寫的複選框。每當文本字段或複選框更改時,cominelatest都會將文本與是否將其大寫的決定結合起來。最終結果已準備好寫入輸出。

下次繼續!!!

原文連接:

https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/4.%20Combining%20sequences.md

代碼:https://github.com/woshiyexinjie/rxjava-leaner

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

相關文章
相關標籤/搜索