0°

RxJava的使用(三)转换——Map、FlatMap

内容预览:
  • “ FlatMap FlatMap是一个比教难理解的一个转换,在这里先假设一个需求,...~
  • 注意:FlatMap对这些Observables发射的数据做的是合并(merge)操作,因此...~
  • 这里就不一一列举他们的用法了,其他常用的操作符如下: 结合代码和示意...~

始发于微信公众号: 程序员小乐

分享编程技能、互联网技术、生活感悟、打造干货分享平台,将总结的技术、心得、经验分享给大家,这里不只限于技术!学无止境,不求尽如人意,但求问心无愧。让学习成为一种美、一种习惯。值得爱学习的你去关注,感觉有帮助转发分享让更多的人去关注!点击上方 蓝字 关注!



作者:带心情去旅行

链接: http://www.jianshu.com/p/52cd2d514528
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

RxJava的使用(三)转换——Map、FlatMap—– 由   分享

每日英语

When you’re down and out, remember to keep your head up. When you’re up and well, remember to keep your feet down. 

穷困潦倒时,也记得要昂首阔步;春风得意时,也记得要脚踏实地。


前两篇介绍了RxJava的基本用法,对Rxjava还不了解的请先看以上两篇。这篇为大家讲解RxJava中map和flatMap的使用。


参考:给 Android 开发者的 RxJava 详解

(http://gank.io/post/560e15be2dca930e00da1083)本文部分内容引用自该博客)

回顾



前两篇为大家介绍了使用RxJava打印多个字符串的方法


RxJava的使用(三)转换——Map、FlatMap


这样的例子基本没有实际用处,只是为大家演示如何使用Rxjava。今天就抛开这个例子。


Map



在使用map之前要先说道一个接口:Func1,Func1和上一篇提到的Action1相似。Func1 和 Action的区别在于, Func1 包装的是有返回值的方法。
接下来就是map的用法,看代码更直观点;
例:得到多个Student对象中的name,保存到nameList中


RxJava的使用(三)转换——Map、FlatMap


可以看到Observable中原来的参数是Student对象,而最后我们需要的是name,这里使用了map来实现这一转换的过程。当然,map可以多次使用。


RxJava的使用(三)转换——Map、FlatMap


FlatMap



FlatMap是一个比教难理解的一个转换,在这里先假设一个需求,需要打印多个Student所学的课程。这跟之前获取Student的name又不同了,这里先确定一下关系,一个Student类中只有一个name,而一个Student却有多门课程(Course),Student我们可以理解成这样:


RxJava的使用(三)转换——Map、FlatMap


如果使用map来实现打印所有学生所修个课程名,实现的代码是这样的:


RxJava的使用(三)转换——Map、FlatMap


可以看到,在Action1中出现了for来循环打印课程名,使用RxJava就是为了剔除这样的嵌套结构,使得整体的逻辑性更强。这时候就可以使用flatMap了,使用flatMap实现的代码是这样的:


RxJava的使用(三)转换——Map、FlatMap


这样就实现了跟上面代码一样的效果,看起来有点懵?确实,flatMap理解起来有点绕,刚接触flatMap的时候我也是懵逼一个。下面我将flatMap的示意图,希望能帮助理解:


RxJava的使用(三)转换——Map、FlatMap

FlatMap示意图


由上图可以看出Student1、Student2经过flatMap后,按顺序依次经历了Observable1、Observable2,分别转化为Course。最后按顺序得到Course1、Course2、Course3、Course4、Course5、Course6,其中1-3由Student1得到,4-6由Student2得到。
结合代码和示意图,是不是对flatMap有了一定的理解。


注意:FlatMap对这些Observables发射的数据做的是合并(merge)操作,因此它们可能是交错的。也就说,传入的顺序可能跟出来的顺序不一样。
如果要保证顺的的话,可以使用concatMap。


其他操作符



除了map和flatMap之外,还有其他操作符以供使用。这里就不一一列举他们的用法了,其他常用的操作符如下:


结合代码和示意图,是不是对flatMap有了一定的理解。


filter:集合进行过滤
each:遍历集合
take:取出集合中的前几个
skip:跳过前几个元素

更多字符串https://www.zhihu.com/question/32209660


小结



看完map、flatMap后,慢慢能看到RxJava的实际用处了。不过只是这点功能的RxJava是远远不能满足我们的需求,更多的用法我只能在后面更新了。今天就到这里吧!!!


如果您觉得不错,请别忘了分享到您的朋友圈让更多的人看到!! 您的举手之劳,就是对我最好的支持,非常感谢!


RxJava的使用(三)转换——Map、FlatMap

每日掏心话

成长就是你哪怕难过的快死掉了,但你第二天还是照常去上课上班。没有人知道你发生了什么,也没有人在意你发生了什么。


RxJava的使用(三)转换——Map、FlatMap


推荐阅读





小密圈
这里聚集了业界内的大牛,值得各位大牛的加入!


RxJava的使用(三)转换——Map、FlatMap

看完本文有收获?请转发分享给更多人
关注「杨守乐」,提升编程技能

【QQ技术群】279126311 []
【QQ技术群】484572225 [未]

以上就是:RxJava的使用(三)转换——Map、FlatMap 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论