学习了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之操作符的更多相关文章

  1. Android开发学习之路--RxAndroid之初体验

    学了一段时间android,看了部分的项目代码,然后想想老是学基础也够枯燥乏味的,那么就来学习学习新东西吧,相信很多学java的都听说过RxJava,那么android下也有RxAndroid. Rx ...

  2. Android开发学习之路--RxAndroid之简单原理

      学习了RxAndroid,其实也就是RxJava了,但是还是不是非常清楚到底RxAndroid有什么用呢?为什么要使用RxAndroid呢?这篇文章讲得不错,RxJava的原理.但是这里还是把整个 ...

  3. Android开发学习之路--RxAndroid之lambda

      RxJava的简单使用基本上也了解了,其实还有一个比较好玩的就是java8才有的lambda了. lambda在android studio下的环境搭建 下载java8   下面就来搭建下这个环境 ...

  4. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  5. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  6. Android开发学习之路--Android Studio cmake编译ffmpeg

      最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...

  7. Android开发学习之路--网络编程之xml、json

    一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...

  8. Android开发学习之路--Activity之初体验

    环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...

  9. Android开发学习之路--Android系统架构初探

    环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...

随机推荐

  1. C++Primer学习——const

    Const int size = 512; 在编译的时候,编译器会把用到该变量的地方全部替换成对应的值. const&可以绑定字面值,所以当用常量引用绑定一个常量时,是否可以看成那个值在编译阶 ...

  2. 51 nod 1394 1394 差和问题(线段树)

    1394 差和问题基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个多重集合S(即里面元素可以有重复),初始状态下有n个元素,对他进行如下操作: 1.向S里面添 ...

  3. 暗牧 (m)

    题目描述在 Dato3 的世界里,英雄们通过对量子力学的研究,发现了世界上其实存在着无数个位面——即是也被称作平行宇宙的存在.位面有无数多个,每个位面中包含 n 颗行星,由 n−1 个虫洞链接.同一个 ...

  4. ●BZOJ 4559 [JLoi2016]成绩比较(容斥)

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4559 题解: 容斥,拉格朗日插值法. 结合网上的另一种方法,以及插值法,可以把本题做到 O( ...

  5. poj2947 高斯消元

    Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 5218   Accepted: 1802 De ...

  6. poj1741Tree 点分治

    上午学习了点分治,写了1个半小时终于写出一个代码--poj1741,可以说是个模板题. 分治:对于每个儿子找出重心,分别处理 注意:1.每次处理一个重心后,ans减去对它儿子的处理 原因:因为统计方法 ...

  7. 毕业设计-JSP论文盲审系统

    之前做的一款jsp的论文盲审系统,ssh框架的,学生提交论文,系统管理员将论文分配给教员,教员在不知学员是谁的情况之下,对论文进行打分,然后提交给系统,最后系统发布成绩,供学员查看. 整体做的还不错, ...

  8. 对I/O设备分配的一般策略是什么?

    策略是:独享分配.共享分配.虚拟分配 补充:I/O设备的分配算法 1.  先请求先服务 2.  优先级最高者优先

  9. 深入以太坊智能合约 ABI

    开发 DApp 时要调用在区块链上的以太坊智能合约,就需要智能合约的 ABI.本文希望更多了解 ABI,如为什么需要 ABI?如何解读 Ethereum 的智能合约 ABI?以及如何取得合约的 ABI ...

  10. spring boot+mybaits+mysql+generato(逆向工程)+前后台数据交互

    如按照我博客上没有弄出来 请在下面留言 我好修改 谢谢 小弟使用的是Eclipse 首先下载STS插件 help--->Elipse Marketplace--->find搜索栏里面搜索S ...