到目前爲止,咱們已經看到了大多數容許咱們建立一個序列並將其轉換爲咱們想要的序列的方法。可是,大多數應用程序將有多個輸入源。咱們須要一種結合序列的方法。咱們已經看到一些序列使用多個可觀察到的。在本章中,咱們將看到使用多個序列生成一個序列的最重要的運算符。ios
最直接的序列組合是一個接在另外一個後面。git
concatgithub
Conat運算符將一個接一個的序列串聯起來。有許多重載方法,這容許您以不一樣的數量和格式提供源可觀測數據。緩存
將兩個(或更多)給定的可觀測值串聯起來是很簡單的。微信
輸出:函數
若是要組合的序列的數量是動態的,則能夠提供一個可觀察到的輸出要鏈接的序列。在本例中,咱們將使用熟悉的groupBy建立一個以相同字母開始的單詞序列。spa
輸出對象
Conat的行爲相似於ConatMap。實際上,ConatMap是map 後 connat。it
ConatWith運算符是另外一種執行conat的樣式,它容許您在一個鏈中一個接一個地組合序列:io
輸出:
repeat 容許您在序列自己以後鏈接起來,無論是無限的仍是有限的時間。repeat 不會緩存值來重複它們。當時機成熟時,它將開始新的訂閱並處理舊的訂閱。
寫起來也很是方便
輸出:
若是你須要比 repeat 給予的更多的控制,您可使用 repeatWhen 操做符控制何時開始複製。時間由您提供的可觀察對象定義。當原始序列完成時,它等待可觀察到的處理來發出一些東西(值是不相關的),只有到那時它纔會重複。若是可觀察到的處理終止,這意味着重複應該中止。
對於信號來講,知道重複什麼時候完成多是有用的。repeatWhen 提供了一種特殊的可觀察到的,當重複結束時會發出無效的信號。你能夠用這個觀察到的來構造你的信號。
RepeatWhen的參數是一個函數,它接受一個可觀察值並返回一個可觀察值。這兩個對象發出的類型並不重要。輸入是表示重複結束的可觀察值,返回的可觀察值將用於發出從新啓動的信號。
在下一例子中嗎咱們將使用 repeatWhen 創造 repeat(n)
輸出:
在這裏,重複當即發生:OB在重複結束時發出,所以返回的可觀察到的也會在完成重複後當即發出。這標誌着新的重複即將開始。
在下一個示例中,咱們建立的序列每兩秒鐘重複一次,直到永遠。
請注意,序列每2秒重複一次,而無論它什麼時候完成。這是由於咱們建立了一個獨立的間隔,每2秒發送一個信號。在下一章中, [Time-shifted sequences](/Part 3 - Taming the sequence/5. Time-shifted sequences.md),咱們將看到如何在更多控制的狀況下及時處理序列。
另外一件須要注意的事情是 ob.subscribe() 語句,它彷佛是無用的,可是必要的,由於它迫使ob被建立。在當前的實現中,若是ob沒有訂閱,那麼重複就永遠不會開始。
原文連接:
https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/4.%20Combining%20sequences.md
有什麼討論的內容,能夠加我微信公衆號: