RX操作符之对Observable发射的数据执行变换操作一(map、cast、flatmap、flatmapiteriable、switchmap)
2016-08-02 10:54
405 查看
一、map
运行结果:
二、cast
注:所相互转换的类之间需要存在某种关系,如继承、实现
运行结果:
三、encode
四、byLine
五、flatmap
flatmap通过一个函数将原来的数据的每一项进行转换,并将返回的数据进行Observable包装,然后将所有这些Observable转换成一个Observable发射,所执行的结果可能和元数据items中数据的顺序不一致
运行结果:
六、flatmapiteriable
使用iterable作为源数据再将其转换成多个observable
运行结果:
七、concatMap
八、switchmap
运行结果:
九、split
Map操作符对原始Observable发射的每一项数据应用一个你选择的函数,然后返回一个发射这些结果的Observable。
private void testMap() { String[]items = {"just1","just2","just3","just4","just5","just6"}; Observable<String> myObservable = Observable.from(items) .map(new Func1<String, String>() { @Override public String call(String s) { return mapInfo(s); } }); Subscriber<String> mySubscriber = new Subscriber<String>() { @Override public void onNext(String s) { System.out.println("onNext................."+s); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber); }
private String mapInfo(String s){ return s+" had mapped;"; }
运行结果:
二、cast
cast操作符将原始Observable发射的每一项数据都强制转换为一个指定的类型,然后再发射数据,它是
map的一个特殊版本
注:所相互转换的类之间需要存在某种关系,如继承、实现
List<Machine> items = new ArrayList<>(); for (int i=0;i<3;i++){ items.add(new Computer("computer"+i,"material"+i)); } Observable<Computer> myObservable = Observable.from(items) .cast(Computer.class); // .cast(TestCastEntity.class); Subscriber<Computer> mySubscriber = new Subscriber<Computer>() { @Override public void onNext(Computer s) { System.out.println("onNext................."+s.name+".........."+s.material); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber); } public class Machine { public String name; public Machine(String name){ this.name = name; } } public class Computer extends Machine{ public String material; public Computer(String name,String material){ super(name); this.material = material; } }
运行结果:
三、encode
encode将一个发射字符串的Observable变换为一个发射字节数组(这个字节数组按照原始字符串中的多字节字符边界划分)的Observable。
四、byLine
byLine将一个发射字符串的Observable变换为一个按行发射来自原始Observable的字符串的Observable。
五、flatmap
FlatMap操作符使用一个指定的函数对原始Observable发射的每一项数据执行变换操作,这个函数返回一个本身也发射数据的Observable,然后
FlatMap合并这些Observables发射的数据,最后将合并后的结果当做它自己的数据序列发射。
flatmap通过一个函数将原来的数据的每一项进行转换,并将返回的数据进行Observable包装,然后将所有这些Observable转换成一个Observable发射,所执行的结果可能和元数据items中数据的顺序不一致
private void testFlatMap() { Integer[]items = {1,2,3,4,5,6}; Observable<String> myObservable = Observable.from(items) .flatMap(new Func1<Integer, Observable<String>>() { @Override public Observable<String> call(Integer i) { return Observable.just(flatMapInfo(i)); } }); Subscriber<String> mySubscriber = new Subscriber<String>() { @Override public void onNext(String s) { System.out.println("onNext................."+s); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber); } private String flatMapInfo(Integer i){ return "flatmap" + i; }
运行结果:
六、flatmapiteriable
使用iterable作为源数据再将其转换成多个observable
Integer[]items = {1,2,3,4,5,6}; Observable<String> myObservable = Observable.from(items) .flatMapIterable(new Func1<Integer, Iterable<? extends String>>() { @Override public Iterable<String> call(Integer integer) { ArrayList<String> strings = new ArrayList<String>(); strings.add("iterable"+integer); return strings; } }); Subscriber<String> mySubscriber = new Subscriber<String>() { @Override public void onNext(String s) { System.out.println("onNext................."+s); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
七、concatMap
concatMap操作符,它类似于最简单版本的
flatMap,但是它按次序连接而不是合并那些生成的Observables,然后产生自己的数据序列。
八、switchmap
switchMap
操作符。它和flatMap
很像,除了一点:当原始Observable发射一个新的数据(Observable)时,它将取消订阅并停止监视产生执之前那个数据的Observable,只监视当前这一个。
Integer[]items = {1,2,3,4,5,6}; Observable<String> myObservable = Observable.from(items) .switchMap(new Func1<Integer, Observable<String>>() { @Override public Observable<String> call(Integer integer) { return Observable.just(integer+"").subscribeOn(Schedulers.newThread()); } }); Subscriber<String> mySubscriber = new Subscriber<String>() { @Override public void onNext(String s) { System.out.println("onNext................."+s); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
运行结果:
九、split
split操作符将一个发射字符串的Observable转换为另一个发射字符串的Observable,只不过,后者将原始的数据序列当做一个数据流,使用一个正则表达式边界分割它们,然后合并发射分割的结果。
相关文章推荐
- RX操作符之对Observable发射的数据执行变换操作一(map、flatmap)
- RX操作符之对Observable发射的数据执行变换操作二(scan、groupby、buffer、window)
- 7.2 Transforming 变换操作 - Buffer/Window/Map/FlatMap/GroupBy/Scan
- spring 启动后执行自我操作(如加入数据进入缓存) 基于注解
- SharedPreferences数据存取操作,android引导页一次执行的方法。
- 多线程操作stl::map引起的数据不一致问题的解决过程与方法
- Oracle 11.2.0.1执行数据泵导入导出操作,导入日志报ORA-39083和ORA-14102错误
- .net中利用oracle产品自带的数据访问组件(Oracle.DataAccess.dll)提升批量更新操作的执行效率
- MapObject shape数据操作 一
- 查询优化器内核剖析第八篇:执行引擎之数据访问操作
- Oracle 11.2.0.1执行数据泵导入导出操作,导入日志报ORA-39083和ORA-14102错误
- 查询优化器内核剖析第七篇:执行引擎之数据访问操作---Scan
- Oracle OEM中成功执行数据导出操作的步骤
- 查询优化器内核剖析第八篇:执行引擎之数据访问操作---Seek与Lookup
- 查询优化器内核剖析第九篇:执行引擎之数据访问操作---Bookmark Lookup
- java第七周封装一类对矩阵操作的对象,该类对象能够对矩阵进行运算,如矩阵中数据的位置变换功能、矩阵的加法功能、矩阵的乘法功能。
- Spring+Hibernate只要执行与数据有关的操作就报空指针错误
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- SQL 执行插入1000万条数据操作 几十秒内!
- Stack 类的操作,将Stack中的数据添加到Map里面