先介绍map概念
- 官网文档
transform the items emitted by an Observable by applying a function to each item.
- 通过对每个项利用一个函数来转换可察看对象收回的项。(百度翻译)
- 集体了解: Observable 到 Observer 之间传递的数据转换
- 重点: Transformation
简略的试试怎么用
- 假如现代钱币加工是先做成圆形
- 下一步是在圆形中打一个方孔
所以流程应该是这样
- 圆形金属-> map(打方孔) -> 钱币
开始撸码
- 先来最根底的发圆形钱币
Observable.just(new circleMoney(), new circleMoney()) .subscribe(new Action1<circleMoney>() { @Override public void call(circleMoney money) { money.SayInfo(); } });
- 而后应用map转换成发方钱币
//先定义个钱币接口public interface SquareMoney { void SayInfo(); //打印型号 void SetInfo(String info); //设置型号}//而后应用map革新成发方钱币Observable.just(new circleMoney(), new circleMoney()) .map(new Func1<circleMoney, SquareMoney>() { @Override public SquareMoney call(circleMoney circleMoney) { //类型转换,向上转换为方形钱币 SquareMoney circleMoney1 = (SquareMoney) circleMoney; //设置封装信息为方形 circleMoney1.SetInfo("SquareMoney"); return circleMoney1; } }) .subscribe(new Action1<SquareMoney>() { @Override public void call(SquareMoney money) { //打印最终封装信息 money.SayInfo(); } });
总结
- map能够进行简略的类型转换,对于小型操作十分适合
- 重点是学习思维,map一系列的操作符用来对数据进行操作
相似的操作符还有
- flatMap 扁平化解决数据
- concatMap 程序化解决数据
- filter:汇合进行过滤
- each:遍历汇合
- take:取出汇合中的前几个
- skip:跳过前几个元素
先介绍flatMap概念
- flat是扁平的意思
官网解释
- flatMap应用一个指定的函数对原始Observable发射的每一项数据之行相应的变换操作,这个函数返回一个自身也发射数据的Observable,而后FlatMap合并这些Observables发射的数据,最初将合并后的后果当做它本人的数据序列发射。
- 这个办法是很有用的,例如,当你有一个这样的Observable:它发射一个数据序列,这些数据自身蕴含Observable成员或者能够变换为Observable,因而你能够创立一个新的Observable发射这些次级Observable发射的数据的残缺汇合。
集体了解
- flatMap将一个发射数据的Observable变换为多个Observables,而后将它们发射的数据合并后放进一个独自的Observable。
- 实用于大汇合里还有小汇合,造成多个简单嵌套等劫难代码,
- 防止循环嵌套,优化代码构造应用
开始撸码
- 不晓得各位有没有玩过套娃,一个大的外面有好几个小娃娃的那种玩具
- 假如有N个大点的套娃
- 每个套娃里有N个小套娃
- 输入每个大套娃外面的小套娃信息
//小套娃class SmallMatryoshka { private String name = "小套娃";//名字}//大套娃class BigMatryoshka { private String name = "大套娃";//名字 private List<SmallMatryoshka> smallMatryoshkaList;//蕴含小套娃的列表}//先创立一堆小套娃,放到List中ArrayList<SmallMatryoshka> smallMatryoshkas = new ArrayList<>();smallMatryoshkas.add(new SmallMatryoshka());smallMatryoshkas.add(new SmallMatryoshka());smallMatryoshkas.add(new SmallMatryoshka());// 创立大套娃,并将小套娃列表放到大套娃中BigMatryoshka bigMatryoshka = new BigMatryoshka();bigMatryoshka.smallMatryoshkaList = smallMatryoshkas;//大套娃列表,把大套娃放进去List<BigMatryoshka> bigMatryoshkas = new ArrayList<BigMatryoshka>();bigMatryoshkas.add(bigMatryoshka);bigMatryoshkas.add(bigMatryoshka);bigMatryoshkas.add(bigMatryoshka);//输入大套娃列表里,大套娃蕴含的所有的小套娃Observable.from(bigMatryoshkas) .flatMap(new Func1<BigMatryoshka, Observable<SmallMatryoshka>>() { @Override public Observable<SmallMatryoshka> call(BigMatryoshka bigMatryoshka1) { //转换成Observable后再次发送 return Observable.from(bigMatryoshka1.smallMatryoshkaList); } }) .subscribe(new Action1<SmallMatryoshka>() { @Override public void call(SmallMatryoshka smallMatryoshka) { //打印套娃名称 LogUtils.e(smallMatryoshka.name); } });
总结
- 优化了十分多的循环代码,可读性,效率都高了很多
- 其余的操作符,挖个坑,当前缓缓填