一、描述
当两个Observables中的任何一个发射了数据时,使用一个函数结合每个Observable发射的最近数据项,并且基于这个函数的结果发射数据。
CombineLatest操作符行为类似于zip,但是只有当原始的Observable中的每一个都发射了一条数据时zip才发射数据。CombineLatest则在原始的Observable中任意一个发射了数据时发射一条数据。当原始Observables的任何一个发射了一条数据时,CombineLatest使用一个函数结合它们最近发射的数据,然后发射这个函数的返回值。
RxJava将这个操作符实现为combineLatest,它接受二到九个Observable作为参数,或者单个Observables列表作为参数。它默认不在任何特定的调度器上执行。
二、示意图
三、示例代码
1 | Observable create1 = Observable.create(new Observable.OnSubscribe<Integer>() { |
四、运行结果
1 | onNext: 0-0 |
注意点:
create操作符生成数据,需在新的线程上执行,否则会出现先发射完第一个create的数据,再发射第二个create的数据。
项目代码已上传到Github:https://github.com/SherlockShi/RxJavaBestPractise
五、更多
combineLatest操作符还有以下变体:
- combineLatest(List,FuncN)
- combineLatest(Observable,Observable,Func2)
跟combineLatest相关的操作符还有:
- withLatestFrom
详情可查阅下面的参考资料。
六、参考资料
PS:欢迎关注 SherlockShi 个人博客