Android开发学习之路--RxAndroid之操作符
学习了RxAndroid的一些基本知识,上篇文章也试过了RxAndroid的map操作符,接着来学习更多的操作符的功能吧。
操作符就是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件。
map
map从字面上理解就是映射的关系了,可以把一个事件转换为另一个事件,先看个例子吧还是:
private void testMap1() {
Observable.just("testMap")
.map(s -> s + " by eastmoon")
.subscribe(s -> Log.d(TAG, s));
}
这是个字符串拼接例子,主要是当observable发送了testMap后,经过map转换为testMap by east moon然后给了subscribe。
接着我们继续看一个例子:
private void testMap2() {
Observable.just("testMap")
.map(s -> s.hashCode())
.map(i -> Integer.toString(i))
.subscribe(s -> Log.d(TAG, s));
}
这里主要是实现了类型转换,把String转换为int型,然后再把int型转换为String。这里的map可以无限的多,为了简化observable和subscribe的事情。
from
Observable.from()方法,它接收一个集合作为输入,然后每次输出一个元素给subscriber。当有多个输入,那么就类似队列,一个一个来的时候,需要通过循环输出,而from刚好可以实现这个功能。先看下例子:
private void testFrom() {
Observable.from(new String[]{"hello1", "hello2", "hello3"})
.subscribe(s -> Log.d(TAG, s));
}
这里会依次输出hello1,hello2和hello3。
flatMap
Observable.flatMap()接收一个Observable的输出作为输入,同时输出另外一个Observable。
private void testFlatMap() {
List<String> list = new ArrayList<String>();
list.add("hello1");
list.add("hello2");
list.add("hello3");
Observable.just(list)
.flatMap(s -> Observable.from(s))
.subscribe(s1 -> Log.d(TAG, s1));
}
这里定义了一个list,传入之后返回的是Observable的from方法,然后通过flatMap把返回的from方法作为输入,再通过subscribe方法。
filter
filter()输出和输入相同的元素,并且会过滤掉那些不满足检查条件的。
private void testFlatMap() {
List<String> list = new ArrayList<String>();
list.add("hello1");
list.add("hello2");
list.add("hello3");
list.add("haha1");
list.add("haha2");
Observable.just(list)
.flatMap(s -> Observable.from(s))
.filter(s -> filterString(s, "hello"))
.subscribe(s2 -> Log.d(TAG, s2));
}
private boolean filterString(String str, String str1) {
String subs = str.substring(0, str1.length());
if(!subs.equals(str1))
return true;
return false;
}
这里选取了hello开头的String过滤掉,不是hello开头的不过滤。
take
take()输出最多指定数量的结果。
private void testFlatMap() {
List<String> list = new ArrayList<String>();
list.add("hello1");
list.add("hello2");
list.add("hello3");
list.add("haha1");
list.add("haha2");
list.add("haha3");
list.add("haha4");
Observable.just(list)
.flatMap(s -> Observable.from(s))
.filter(s -> filterString(s, "hello"))
.take(3)
.subscribe(s2 -> Log.d(TAG, s2));
}
private boolean filterString(String str, String str1) {
String subs = str.substring(0, str1.length());
if(!subs.equals(str1))
return true;
return false;
}
这里take(3),表示最多输出3个,虽然上面有四个符合。
doOnNext
doOnNext()允许我们在每次输出一个元素之前做一些额外的事情。
private void testFlatMap() {
List<String> list = new ArrayList<String>();
list.add("hello1");
list.add("hello2");
list.add("hello3");
list.add("haha1");
list.add("haha2");
list.add("haha3");
list.add("haha4");
Observable.just(list)
.flatMap(s -> Observable.from(s))
.filter(s -> filterString(s, "hello"))
.take(3)
.doOnNext(s1 -> Log.d(TAG, "doOnNext:"+s1))
.subscribe(s2 -> Log.d(TAG, "subscribe:"+s2));
}
private boolean filterString(String str, String str1) {
String subs = str.substring(0, str1.length());
if(!subs.equals(str1))
return true;
return false;
}
这里只是通过简单的打印来查看信息。
基本上操作符就先学习这些了,当然还有更多的操作符,可以参考文档。更多文档。
Android开发学习之路--RxAndroid之操作符的更多相关文章
- Android开发学习之路--RxAndroid之初体验
学了一段时间android,看了部分的项目代码,然后想想老是学基础也够枯燥乏味的,那么就来学习学习新东西吧,相信很多学java的都听说过RxJava,那么android下也有RxAndroid. Rx ...
- Android开发学习之路--RxAndroid之简单原理
学习了RxAndroid,其实也就是RxJava了,但是还是不是非常清楚到底RxAndroid有什么用呢?为什么要使用RxAndroid呢?这篇文章讲得不错,RxJava的原理.但是这里还是把整个 ...
- Android开发学习之路--RxAndroid之lambda
RxJava的简单使用基本上也了解了,其实还有一个比较好玩的就是java8才有的lambda了. lambda在android studio下的环境搭建 下载java8 下面就来搭建下这个环境 ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发学习之路--基于vitamio的视频播放器(二)
终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...
- Android开发学习之路--Android Studio cmake编译ffmpeg
最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...
- Android开发学习之路--网络编程之xml、json
一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...
- Android开发学习之路--Activity之初体验
环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...
- Android开发学习之路--Android系统架构初探
环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...
随机推荐
- C++Primer学习——const
Const int size = 512; 在编译的时候,编译器会把用到该变量的地方全部替换成对应的值. const&可以绑定字面值,所以当用常量引用绑定一个常量时,是否可以看成那个值在编译阶 ...
- 51 nod 1394 1394 差和问题(线段树)
1394 差和问题基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个多重集合S(即里面元素可以有重复),初始状态下有n个元素,对他进行如下操作: 1.向S里面添 ...
- 暗牧 (m)
题目描述在 Dato3 的世界里,英雄们通过对量子力学的研究,发现了世界上其实存在着无数个位面——即是也被称作平行宇宙的存在.位面有无数多个,每个位面中包含 n 颗行星,由 n−1 个虫洞链接.同一个 ...
- ●BZOJ 4559 [JLoi2016]成绩比较(容斥)
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4559 题解: 容斥,拉格朗日插值法. 结合网上的另一种方法,以及插值法,可以把本题做到 O( ...
- poj2947 高斯消元
Widget Factory Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 5218 Accepted: 1802 De ...
- poj1741Tree 点分治
上午学习了点分治,写了1个半小时终于写出一个代码--poj1741,可以说是个模板题. 分治:对于每个儿子找出重心,分别处理 注意:1.每次处理一个重心后,ans减去对它儿子的处理 原因:因为统计方法 ...
- 毕业设计-JSP论文盲审系统
之前做的一款jsp的论文盲审系统,ssh框架的,学生提交论文,系统管理员将论文分配给教员,教员在不知学员是谁的情况之下,对论文进行打分,然后提交给系统,最后系统发布成绩,供学员查看. 整体做的还不错, ...
- 对I/O设备分配的一般策略是什么?
策略是:独享分配.共享分配.虚拟分配 补充:I/O设备的分配算法 1. 先请求先服务 2. 优先级最高者优先
- 深入以太坊智能合约 ABI
开发 DApp 时要调用在区块链上的以太坊智能合约,就需要智能合约的 ABI.本文希望更多了解 ABI,如为什么需要 ABI?如何解读 Ethereum 的智能合约 ABI?以及如何取得合约的 ABI ...
- spring boot+mybaits+mysql+generato(逆向工程)+前后台数据交互
如按照我博客上没有弄出来 请在下面留言 我好修改 谢谢 小弟使用的是Eclipse 首先下载STS插件 help--->Elipse Marketplace--->find搜索栏里面搜索S ...