四、RxJava基础 ---合并操作(Combining Observables)
来源:互联网 发布:淘宝联盟个人可以买吗 编辑:程序博客网 时间:2024/05/22 14:26
一、前言
上篇主要介绍了 过滤操作,本篇介绍合并操作
二、合并操作(Combining Observables)
使用多个Observables来创建一个Observable
1、zip
使用一个函数组合多个Observable发射的数据集合,然后再发射这个结果。如果多个Observable发射的数据量不一样,则以最少的Observable为标准进行压合。内部通过OperatorZip进行压合。
/** * zip : 使用一个函数组合多个Observable发射的数据集合,然后再发射这个结果。 * 如果多个Observable发射的数据量不一样,则以最少的Observable为标准进行压合。 * 内部通过OperatorZip进行压合。 */ private void zipTest() { Observable observableNick = Observable.just("寒冰射手", "德玛西亚之力", "流浪法师"); Observable observableName = Observable.just("艾希", "盖伦", "瑞兹", "莫甘娜"); Observable.zip(observableName, observableNick, new Func2<String, String, String>() { @Override public String call(String name, String nick) { return name + "--昵称->" + nick; } }).subscribe(new Action1<String>() { @Override public void call(String s) { Log.d("zip", s); // 艾希--昵称->寒冰射手 // 盖伦--昵称->德玛西亚之力 // 瑞兹--昵称->流浪法师 } }); }
2、merge
将多个Observable合并为一个。不同于concat,merge不是按照添加顺序连接,而是按照时间线来连接。其中mergeDelayError将异常延迟到其它没有错误的Observable发送完毕后才发射。而merge则是一遇到异常将停止发射数据,发送onError通知。
/** * merge : 根据 Observable 发送的时间顺序 执行 ,(异步) */ private void mergeTest(){ Observable observableName = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { Log.d("merge 1",""+Thread.currentThread().getName()); subscriber.onNext("艾希"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } subscriber.onNext("盖伦"); } }).subscribeOn(Schedulers.newThread()); Observable observableNick = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { Log.d("merge 2",""+Thread.currentThread().getName()); subscriber.onNext("1"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } subscriber.onNext("2"); } }).subscribeOn(Schedulers.newThread()); Observable .merge(observableName,observableNick) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.d("merge",s); // 异步 结果-------- // merge: 艾希 // merge: 1 // merge: 2 // merge: 盖伦 // 同步 结果-------- // merge: 艾希 // merge: 盖伦 // merge: 1 // merge: 2 } }); }
3、Join
阅读全文
0 0
- 四、RxJava基础 ---合并操作(Combining Observables)
- RxJava操作符(四)Combining
- RxJava操作符(四)Combining
- RxJava操作符(四)Combining
- RxJava操作符(四)Combining
- RxJava操作符(四)Combining
- 一、RxJava基础 ---创建操作(Creating Observables)
- 二、RxJava基础 ---转化操作(Transforming Observables)
- 三、RxJava基础 ---过滤操作(Filtering Observables)
- RxJava操作符(一)Creating Observables
- RxJava操作符(二)Transforming Observables
- RxJava操作符(一)Creating Observables
- RxJava操作符(二)Transforming Observables
- RxJava操作符(一)Creating Observables
- RxJava Creating Observables(创建操作符)
- RxJava操作符(一)Creating Observables
- RxJava操作符(二)Transforming Observables
- RxJava操作符(一)Creating Observables
- javascript中&&的问题
- 本地SVN代码进行CheckStyle代码走查—Fileset from project [XXX] has no valid check configuration
- 无向图的邻接表广度优先算法
- Unity场景打包AssetBundle并加载
- Android开发之渐变效果gradient属性
- 四、RxJava基础 ---合并操作(Combining Observables)
- LaTex入门(一)
- [bzoj2144]: 跳跳棋
- 噪声估计的主要方法简要概述
- javascript中检测某个字符串在数组中是否存在
- PHP7扩展开发
- SVN使用总结
- CSS Modules用法教程
- MySQL函数