讲解zip操作符之前,先来巩固一个概念的区别,比如如何让一个线程睡眠一秒?
通常情况下,我们在Java中会使用Thread.sleep(1000),但是笔者就就这个问题今天就遇到一个坑,不断地出现InterruptedException这个异常,后来通过另外一种方式解决了问题,即SystemClock.sleep(1000);
那么zip操作符是如何定义的呢?
简单来说zip操作符就是合并多个被观察者的数据流, 然后发送(Emit)最终合并的数据。借用网上的一张图,分析的比较透彻,如下:
image.png
从上游中可以看出,上游有两根水管,其中一根水管负责发送圆形事件 , 另外一根水管负责发送三角形事件 , 通过Zip操作符, 使得圆形事件 和三角形事件 合并为了一个矩形事件 . 拆分过程如下:
image.png
通过分解动作我们可以看出:
组合的过程是分别从 两根水管里各取出一个事件 来进行组合, 并且一个事件只能被使用一次, 组合的顺序是严格按照事件发送的顺利 来进行的, 也就是说不会出现圆形1 事件和三角形B 事件进行合并, 也不可能出现圆形2 和三角形A 进行合并的情况.
最终下游收到的事件数量 是