Rxjava学习之结合操作符—zip

时间:2021-05-25 17:47:07

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

Rxjava学习之结合操作符—zip

1、zip

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

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

Rxjava学习之结合操作符—zip

     通过一个函数将多个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))

Rxjava学习之结合操作符—zip

以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默认不在任何特定的操作符上执行。