android 定义map,Android进阶学习RxJava(四)map和flatMap等操作符使用从入门到精通

先介绍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() {

@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() {

@Override

public SquareMoney call(circleMoney circleMoney) {

//类型转换,向上转换为方形钱币

SquareMoney circleMoney1 = (SquareMoney) circleMoney;

//设置封装信息为方形

circleMoney1.SetInfo("SquareMoney");

return circleMoney1;

}

})

.subscribe(new Action1() {

@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个大点的套娃

1460000037432308每个套娃里有N个小套娃

输出每个大套娃里面的小套娃信息//小套娃

class SmallMatryoshka {

private String name = "小套娃";//名字

}

//大套娃

class BigMatryoshka {

private String name = "大套娃";//名字

private List smallMatryoshkaList;//包含小套娃的列表

}

//先创建一堆小套娃,放到List中

ArrayList smallMatryoshkas = new ArrayList<>();

smallMatryoshkas.add(new SmallMatryoshka());

smallMatryoshkas.add(new SmallMatryoshka());

smallMatryoshkas.add(new SmallMatryoshka());

// 创建大套娃,并将小套娃列表放到大套娃中

BigMatryoshka bigMatryoshka = new BigMatryoshka();

bigMatryoshka.smallMatryoshkaList = smallMatryoshkas;

//大套娃列表,把大套娃放进去

List bigMatryoshkas = new ArrayList();

bigMatryoshkas.add(bigMatryoshka);

bigMatryoshkas.add(bigMatryoshka);

bigMatryoshkas.add(bigMatryoshka);

//输出大套娃列表里,大套娃包含的所有的小套娃

Observable.from(bigMatryoshkas)

.flatMap(new Func1>() {

@Override

public Observable call(BigMatryoshka bigMatryoshka1) {

//转换成Observable后再次发送

return Observable.from(bigMatryoshka1.smallMatryoshkaList);

}

})

.subscribe(new Action1() {

@Override

public void call(SmallMatryoshka smallMatryoshka) {

//打印套娃名称

LogUtils.e(smallMatryoshka.name);

}

});

总结优化了非常多的循环代码,可读性,效率都高了很多

其他的操作符,挖个坑,以后慢慢填

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值