RxJava-操作符
来源:互联网 发布:js获取css样式表 编辑:程序博客网 时间:2024/06/16 21:54
操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件。
RxJava提供了很多很有用的操作符。
我们的观察者的作用是响应,那么数据的变换就要靠操作符来对观察者的Observable对象进行修改来实现了
一.Map
特性:
1.它不必返回Observable对象返回的类型,你可以使用map操作符返回一个发出新的数据类型的observable对象。
2.可以对一个Observable多次使用map
//刚创建的Observable是String类型的Observable.just("Hellp Map Operator")//通过操作符,返回了Integer类型的Observable对象.map(new Func1<String, Integer>() { @Override public Integer call(String s) { return 2015;//通过第一个map转成Integer }//通过操作符,返回了String类型的Observable对象}).map(new Func1<Integer, String>() { @Override public String call(Integer integer) { return String.valueOf(integer);//再通过第二个map转成String }}).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); }});
二.FlatMap
Observable.flatMap()接收一个Observable的输出作为输入,同时输出另外一个Observable。
List<String> s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift"); Observable.just(s).flatMap(new Func1<List<String>, Observable<String>>() { @Override public Observable<String> call(List<String> strings) { //结合from处理 return Observable.from(strings); }}).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println("_flatMap:"+s); }});
日志
_flatMap:Java_flatMap:Android_flatMap:Ruby_flatMap:Ios_flatMap:Swift
Map和FlatMap最大的区别应该是:
FlatMap经过 Observable 的转换,相当于重新开了一个异步的流;
item 被分散了,个数发生了变化。
三.From
from()接收一个集合作为输入,然后每次输出一个元素给subscriber.
List<String> s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift");Observable.from(s).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); }});
日志:
JavaAndroidRubyIosSwift
更多的操作符:
1.filter 过滤,把不符合条件的过滤掉,留下符合条件的
2.take 指定最多输出的数量
3.doOnNext 允许我们在每次输出一个元素之前做一些额外的事情(其实就是在onNext里调用的)
query().flatMap(new Func1<List<String>, Observable<String>>() { @Override public Observable<String> call(List<String> strings) { return Observable.from(strings); }}).flatMap(new Func1<String, Observable<String>>() { @Override public Observable<String> call(String s) { return addPre(s); }}).filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { //包含a的留下 return s.contains("a"); }}).take(3)//最多只取3个 .doOnNext(new Action1<String>() { @Override public void call(String s) { //onNext之前 输出一下 System.out.println("doOnNext:"+s); }}).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); }});
0 0
- RxJava-操作符
- [RxJava笔记]RxJava操作符
- RxJava操作符 -创建型
- RxJava 操作符 combineLatest
- RxJava 操作符 concat
- RxJava 操作符 interval
- RxJava 操作符 take
- RxJava操作符 reduce
- RxJava操作符学习
- RxJava defer操作符
- RXJAVA操作符
- RxJava 的操作符
- RxJava 操作符分类
- RxJava操作符
- RxJava操作符-subscribeOn
- RxJava 组合操作符
- RxJava-过滤操作符
- RxJava转换操作符
- cuda8.0配置opencv2.4.9可能遇到的两个问题
- AAC格式文件解析
- CSDN学霸课表——iOS人机交互设计规范精讲
- eclipse提示Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-com
- hive行转列lateral view explode用法
- RxJava-操作符
- MySQL必知必会-18MySQL更新数据
- FineReport中如何自定义登录界面
- java元注解及源码浅析
- HDU 4310 Hero
- App主界面Tab的四种实现方法(上)
- Redis主从复制和集群配置系列之四
- android中intent的基本使用方法
- PHP常用的设计模式基本有四种