java rxjava zip_RxJava 学习笔记<十六> zip和Comoninelatest操作符

到目前为止,我们已经看到了一些运算符,它们以某种方式将多个序列压扁为同一类型。接下来的运算符将源序列并排放置,并使用这些值来创建复合值。

zip

zip是函数式编程中的一个非常基本的函数。它需要两个或多个序列,并按索引将它们的值一对一地匹配起来。需要一个函数来组合这些值。与您对其他环境的期望不同,在RxJavazip中,默认情况下不会将所有值组合在一个元组中。

b6de2a1bc4e1b49a1954990762f0f8d6.png

在下一个示例中,我们有两个源,它们以不同的速率发出项。

ca9860aa4020aa1525fd6d7ee2251258.png

日志输出:

e0edbe41b1c49bf16bb2ac91cea39b00.png

如果我把right改成300毫秒,可以看到另一半默默地等待

1fd9331037d8ea6c32dff8a768f18936.png

如我们所见,zip基于索引匹配值。

zip有多个重载,用于将两个以上的序列压缩在一起。

b6a18234536069ec4320546aa022e1f9.png

当压缩两个以上的序列时,运算符将等待所有源发出下一个值,然后再发出下一个压缩值。在下一个示例中,我们再次添加具有自己频率的另一个源。

11ea0041c3e7f8b457a3fd2cd531793f.png

日志输出:

e6c7abaee53fcccb16261c59fdd2c49c.png

压缩序列在任何源序列成功终止时终止。其他序列的进一步值将被忽略。我们可以在下一个示例中看到这一点,其中我们压缩了不同大小的序列,并计算了压缩序列中的元素。

3880283e216ddae258e260565230d7de.png

日志输出:

761b68458431f393c00186bef61cfe1f.png

压缩序列包含的元素与最短的源序列一样多。

另外还有zipWith操作符,这是zip序列的另一种样式。zipWith允许您在一个链中压缩,但它可能不方便压缩两个以上的序列。

72e326f56ef04de0b374b9583efc128f.png

日志输出:

c86ae812ce27c1f6ec4290ffb98095d7.png

zipWith还具有一个重载,允许您将可观察到sequence压缩为一个可迭代的序列。

364fe56dbbfc57fc6d7b1291230ebb99.png

日志输出:

8eee3b4d439341e4fc2888191fa8eaf1.png

combineLatest

在zip使用索引的地方,cominelatest将使用时间。每当一个被组合的观测值发出一个值时,该值与另一个可观察到的最新值组合在一起。同样,需要一个函数来组合这些值。

7b55f7f6026b115bf7194494582a03df.png

c4b8408544f43cee6fa9237686ea7923.png

日志输出:

8f4ab248fe1c4d1a33b4b8492068c4a3.png

如我们所见,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

有什么讨论的内容,可以加我公众号:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值