RxJava2复习笔记三、操作符Zip

zip专用于合并事件,该合并不是连接(连接操作符后面会说),而是两两配对。它按照严格的顺序应用这个函数。因此它只发射与发射数据项最少的那个Observable对象一样多的数据。

这里用简书大神Season_zlc的一张图片来形象的解释这个合并和发送过程。
这里写图片描述

通过分解动作我们可以看出:

1、组合的过程是分别从两根水管里严格按照事件的发送顺序各取出一个事件来进行组合, 并且每一个事件只会被使用一次,也就是说不会出现圆形1事件和三角形B事件进行合并,也不可能出现圆形2和三角形A进行合并的情况.

2、最终下游收到的事件数量是和上游中发送事件最少的那一根水管的事件数量相同. 这个也很好理解, 因为是从每一根水管 里取一个事件来进行合并, 最少的 那个肯定就最先取完 , 这个时候其他的水管尽管还有事件 , 但是已经没有足够的事件来组合了, 因此下游就不会收到剩余的事件了。

看完文字解释,我们来看看代码该怎么写:

 Observable observe01 = Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> e) throws Exception {
        e.onNext("one");
        e.onNext("two");
        e.onNext("three");
        e.onNext("four");
        e.onNext("five");
        e.onComplete();
    }
})
.observeOn(Schedulers.newThread());

Observable observe02 = Observable.create(new ObservableOnSubscribe<Integer>() {
	@Override
	public void subscribe(ObservableEmitter<Integer> e) throws Exception {
		e.onNext(1);
		e.onNext(2);
		e.onNext(3);
		e.onNext(4);
		e.onNext(5);
		e.onComplete();
	}
})
.observeOn(Schedulers.newThread());

Observable.zip(observe01, observe02, new BiFunction<String, Integer, String>() {
   @Override
   public String apply(String s, Integer integer) throws Exception {
       return s + "←----→" + integer;
   }
   }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() {
       @Override
       public void onSubscribe(Disposable d) {
           logTag("onSubscribe");
       }

       @Override
       public void onNext(Object value) {
           logTag("onNext :  " + value);
       }

       @Override
       public void onError(Throwable e) {
           logTag("onError");
       }

       @Override
       public void onComplete() {
           logTag("onComplete");
       }
   });

执行结果如下:

logTag: string===onSubscribe
logTag: string===one
logTag: string===two
logTag: string===three
logTag: string===four
logTag: string===
logTag: string===1
logTag: string===2
logTag: string===3
logTag: string===4
logTag: string===5
logTag: string===onNext :  one←----→1
logTag: string===onNext :  two←----→2
logTag: string===onNext :  three←----→3
logTag: string===onNext :  four←----→4
logTag: string===onNext :  five←----→5
logTag: string===onComplete
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值