到目前为止,咱们已经看到了一些运算符,它们以某种方式将多个序列压扁为同一类型。接下来的运算符将源序列并排放置,并使用这些值来建立复合值。java
zip是函数式编程中的一个很是基本的函数。它须要两个或多个序列,并按索引将它们的值一对一地匹配起来。须要一个函数来组合这些值。与您对其余环境的指望不一样,在RxJavazip中,默认状况下不会将全部值组合在一个元组中。ios
在下一个示例中,咱们有两个源,它们以不一样的速率发出项。git
日志输出:github
若是我把right改为300毫秒,能够看到另外一半默默地等待编程
如咱们所见,zip基于索引匹配值。函数式编程
zip有多个重载,用于将两个以上的序列压缩在一块儿。
函数
当压缩两个以上的序列时,运算符将等待全部源发出下一个值,而后再发出下一个压缩值。在下一个示例中,咱们再次添加具备本身频率的另外一个源。spa
日志输出:3d
压缩序列在任何源序列成功终止时终止。其余序列的进一步值将被忽略。咱们能够在下一个示例中看到这一点,其中咱们压缩了不一样大小的序列,并计算了压缩序列中的元素。日志
日志输出:
压缩序列包含的元素与最短的源序列同样多。
另外还有zipWith操做符,这是zip序列的另外一种样式。zipWith容许您在一个链中压缩,但它可能不方便压缩两个以上的序列。
日志输出:
zipWith还具备一个重载,容许您将可观察到sequence压缩为一个可迭代的序列。
日志输出:
在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
有什么讨论的内容,能够加我公众号: