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到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...
随机推荐
- 【AIM Tech Round 4 (Div. 2) D Prob】
·题目:D. Interactive LowerBound ·英文题,述大意: 有一个长度为n(n<=50000)的单链表,里面的元素是递增的.链表存储在一个数组里面,给出长度n.表 ...
- 使用jquery.qrcode.js生成二维码
通常生成二维码的方式有两种:第一种是java代码的形式,第二种是通过Js方式. 在这里我做个记录,用js生成二维码,可以在官网下载源码:http://jeromeetienne.github.io/j ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 操作符重载和隐式类型转换
C#中,某些类型会定义隐式类型转换和操作符重载.Unity中,有些对象也定义了隐式类型转换和操作符重载.典型情况有:UnityEngine.Object.UnityEngine.Object的销毁是调 ...
- curl_multi实现并发
普通请求 curl_normal.php <?php $srart_time = microtime(TRUE); $chArr=[]; //创建多个cURL资源 for($i=0; $i< ...
- Java web 前端面试知识点总结
经过几家大厂面试,目前成功拿到唯品会offer,分享一下我的面试知识点总结: 耦合性:也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块的独立性 ...
- Java多线程并发工具类
Semaphore-信号灯机制 当我们创建一个可扩展大小的线程池,并且需要在线程池内同时让有限数目的线程并发运行时,就需要用到Semaphore(信号灯机制),Semaphore 通常用于限制可以访问 ...
- kafka简单回顾
先说说遇到的坑 回顾下kafka topic:生产组:P0\P1----P14 一个消费组:c0 c1 c2 依据Consumer的负载均衡分配 消费顺序"c0:p0-p4 c1:p5-p9 ...
- 解决问题redis问题:ERR Client sent AUTH, but no password is set
是的,这又是一个坑爹的问题. 明明在redis.conf中设置了密码,而且redis还启动了,为什么说没有密码呢? 大家都知道linux下启动redis有很多种方法, 其中有 ./redis-serv ...
- Python OptionParser 使用详解(转载)
Python使用命令行参数能使处理流程更自动化. 链接的内容讲解得十分详细:https://www.tuicool.com/articles/rUvIbi
- Dockerfile的指令
指令的一般格式为 INSTRUCTION arguments,指令包括 FROM.MAINTAINER.RUN 等. FROM 格式为 FROM <image>或FROM <imag ...