Android开发学习之路--RxAndroid之操作符
来源:互联网 发布:手机淘宝个人主页在哪 编辑:程序博客网 时间:2024/06/04 18:22
学习了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开发学习之路--RxAndroid之初体验
- Android开发学习之路--RxAndroid之lambda
- Android开发学习之路--RxAndroid之简单原理
- Android开发学习之路--RxAndroid之初体验
- Android开发学习之路--RxAndroid之初体验
- Android开发学习之路--RxAndroid之lambda
- Android开发学习之路--RxAndroid之简单原理
- Android开发学习之路--RxAndroid之初体验
- Android开发学习之路--RxAndroid之初体验
- android学习之路(三)----RxJava/RxAndroid
- RxAndroid学习之旅
- RxAndroid从零开始学之四(常见操作符)
- RxAndroid之简单网络请求,数据操作
- Android开发学习笔记之窗口操作
- Android应用架构之Retrofit、RxAndroid使用
- Android之响应式编程RxJava/RxAndroid
- OpenCV3.1 xfeatures2d::SIFT 使用
- 史上最详细的Android Studio系列教程三--快捷键
- oracle10g rac stream 多表复制(本地捕获)
- PAT (Advanced Level) Practise 1036 Boys vs Girls (25)
- PHP通过字符串调用函数的代码
- Android开发学习之路--RxAndroid之操作符
- 让人蛋疼的KMP算法
- 测试用例管理之 TestLink
- Linux 多进程编程
- asp.net笔试题
- 线性适应元 - Adaptive Linear Element
- iOS多线程详细使用
- 怎样取消wps 2010首字母大写
- Python计算机视觉编程练习12:os模块学习