Rxjava学习之结合操作符—zip

Zip操作符返回一个Obversable,它使用这个函数按顺序结合两个或多个Observables发射的数据项,然后它发射这个函数返回的结果。它按照严格的顺序应用这个函数。它只发射与发射数据项最少的那个Observable一样多的数据。

这里写图片描述

1、zip

     zip的最后一个参数接受每个Observable发射的一项数据,返回被压缩后的数据,它可以接受一到九个参数:一个Observable序列,或者一些发射Observable的Observables。

Javadoc: zip(Iterable,FuncN))
Javadoc: zip(Observable,FuncN))
Javadoc: zip(Observable,Observable,Func2)) (最多可以有九个Observables参数)

这里写图片描述

     通过一个函数将多个Observables的发射物结合到一起,基于这个函数的结果为每个结合体发射单个数据项。

    Observable ob1 = Observable.just(1,2,3);
    Observable ob2 = Observable.just(10,20,30,40);
    Observable.zip(ob1,ob2, (int1, int2) -> int1+"-"+int2).subscribe(o -> Log.v("TAG", "zip:"+o));

运行结果

zip: 1-10
zip: 2-20
zip: 3-30

注意:zip 返回的Observable发射的速度和最慢的那个 Observable 一样,发射的数据和发射最少数据的 那个 Observable 一样。

2、zipWith

    zipWith操作符总是接受两个参数,第一个参数是一个Observable或者一个Iterable。

Javadoc: zipWith(Observable,Func2))
Javadoc: zipWith(Iterable,Func2))

这里写图片描述

以Observable作为参数
    Observable.just(0,1,23,4).zipWith(Observable.range(0,5),(i1,i2)->i1+"-"+i2)
        .subscribe(o -> Log.v("TAG", "zipWith:"+o));

以Iterable对象作为参数
    Observable.range(0,5)
        .zipWith(Arrays.asList(0,1,2,3,4),(i1,i2)->i1+"-"+i2)
        .subscribe(o->Log.v("TAG","zipWith:"+o));

运行结果:

zipWith: 0-0
zipWith: 1-1
zipWith: 2-2
zipWith: 3-3
zipWith: 4-4  

zip和zipWith默认不在任何特定的操作符上执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值