学习了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. ●POJ 1195 Mobile phones

    题链: http://poj.org/problem?id=1195 题解: 二维树状数组 #include<cstdio> #include<cstring> #includ ...

  2. UVA140 ——bandwidth(搜索)

    Given a graph (V,E) where V is a set of nodes and E is a set of arcs in VxV, and an ordering on the ...

  3. 2015 多校联赛 ——HDU5325(DFS)

    Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Tota ...

  4. Ubuntu16 编译源码安装MXNet 可变卷积Deformable-ConvNets GPU版

    [引言]最近接手了公司的关于虫子识别的项目,使用MXNet框架开发,但是实际用的是Deformable-ConvNets. Deformable-ConvNets为微软研究研究院提出的可变卷积网络,可 ...

  5. sb error

    width: $("#StudentManagement").parent().width(), height: $("#StudentManagement") ...

  6. bash的工作特性及其使用方法

    bash的工作特性之命令执行状态返回值和命令展开所涉及的内容及其示例演出 !脚本执行与调试1.绝对路径执行,要求文件有执行权限2.以sh命令执行,不要求文件有执行权限3..加空格或source命令执行 ...

  7. 深入理解null的原理

    --null的原理 --oracle一直将null和空字符串''<长度为0>同等对待<如'' is null是true,''=null为false,如果声明a varchar2:=' ...

  8. 最小费用最大流(luogu P3381 【模板】最小费用最大流)

    题目链接 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S. ...

  9. Docker的Fig 项目

    在你的应用里面添加一个 fig.yml 文件,并指定一些简单的内容,执行 fig up 它就能帮你快速建立起一个容器 快速搭建基于 Docker 的隔离开发环境 使用 Dockerfile 文件指定你 ...

  10. Python3 CGI编程

    什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户 ...