RxJava操作符实践:4_结合操作之3_zip

一、描述

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

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

RxJava将这个操作符实现为zip和zipWith。

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

二、示意图

zip

三、示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Observable just11 = Observable.just("A", "B");
Observable just21 = Observable.just(1, 2, 3);

Observable.zip(just11, just21, new Func2<String, Integer, String>() {
@Override
public String call(String string, Integer integer) {
return string + integer;
}
})
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.println("onCompleted.");
}

@Override
public void onError(Throwable e) {
System.out.println("onError: " + e.getMessage());
}

@Override
public void onNext(String s) {
System.out.println("onNext: " + s);
}
});

四、运行结果

1
2
3
onNext: A1
onNext: B2
onCompleted.

项目代码已上传到Github:https://github.com/SherlockShi/RxJavaBestPractise

五、更多

zip操作符还有以下变体:

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

跟zip相关的操作符还有:

  • zipWith(Observable,Func2)
  • zipWith(Iterable,Func2)

详情可查阅下面的参考资料。

六、参考资料

ReactiveX官方文档

ReactiveX文档中文翻译

PS:欢迎关注 SherlockShi 个人博客

感谢你的支持,让我继续努力分享有用的技术和知识点!