到目前为止,咱们已经看到了大多数容许咱们建立一个序列并将其转换为咱们想要的序列的方法。可是,大多数应用程序将有多个输入源。咱们须要一种结合序列的方法。咱们已经看到一些序列使用多个可观察到的。在本章中,咱们将看到使用多个序列生成一个序列的最重要的运算符。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
有什么讨论的内容,能够加我微信公众号: