RxJava的map操作符
2015-12-17 19:55
561 查看
还是上面的例子,我们想在输出“John”的后面加一个字符串后缀“后缀”,我们很容易想到在Observable中修改输出的字符串
但是你能改变Observable对象,那当然是可以的,但是如果不能修改Observable对象,例如Observable对象是第三方库提供的,或者Observable对象被多个Subscriber对象订阅,但是我们只想对某个订阅者进行修改。
那是否可以对Subscriber中进行修改呢?例如
但是这种方式不是很能让人满意,因为我们希望Subscribers越轻越好,因为有可能在mainThread中运行subscriber(这句话还不是很理解)。另外根据响应式的函数编程的概念,Subscribers更加应该做的事情是“响应”,响应Observable发出的事件,而不是去修改。如果能在某些中间步骤对“John”进行变换,那岂不是很有趣。
操作符
操作符就是用来解决对Observable对象变换的问题,操作符用于修改在Obervable和最终的Subscriber之间修改Observable发出的事件。RxJava提供了很多很有用的操作符。
现在就来将map操作符,使用来把一个事件转化为另一个事件的。
map()操作符就是用于变换Observable对象的,map操作符返回的是Observable对象,这样就实现链式调用,在一个Observable对象上多次运用map操作符,最终将简洁的数据传送给Subscriber对象。
map操作符进阶
map操作符更有趣的一点是它不必返回Observable对象返回的类型,你可以使用map操作符返回一个发出新的数据类型的observable对象。
比如上面的例子中,subscriber并不关心返回的字符串,而是想要字符串的hash值。
可以得出字符串的hash值。
前面说过Subscriber所做的事情越少越好,我们再增加一个map操作符,如
现在我们只需要知道两点:
1.Observable和Subscriber可以做任何事情
Observable可以进行数据查询,Subscriber用来显示结果;Observable是屏幕上的点击事件,Subscriber用来响应事件;Observable可以是网络请求,Subscriber用来显示请求结果。
2.Observable和Subscriber是独立于中间变换过程的
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度整合的,操作数据是一个很简单的过程。
声明:本文的内容来自博客:/article/2268010.html
Observable.just("John"+"后缀").subscribe(new Action1<String>() { @Override public void call(String s) { textView.setText(s); } });
但是你能改变Observable对象,那当然是可以的,但是如果不能修改Observable对象,例如Observable对象是第三方库提供的,或者Observable对象被多个Subscriber对象订阅,但是我们只想对某个订阅者进行修改。
那是否可以对Subscriber中进行修改呢?例如
Observable.just("John").subscribe(new Action1<String>() { @Override public void call(String s) { textView.setText(s+"后缀"); } });
但是这种方式不是很能让人满意,因为我们希望Subscribers越轻越好,因为有可能在mainThread中运行subscriber(这句话还不是很理解)。另外根据响应式的函数编程的概念,Subscribers更加应该做的事情是“响应”,响应Observable发出的事件,而不是去修改。如果能在某些中间步骤对“John”进行变换,那岂不是很有趣。
操作符
操作符就是用来解决对Observable对象变换的问题,操作符用于修改在Obervable和最终的Subscriber之间修改Observable发出的事件。RxJava提供了很多很有用的操作符。
现在就来将map操作符,使用来把一个事件转化为另一个事件的。
Observable.just("John").map(new Func1<String, String>() { @Override public String call(String s) { return s+"后缀"; } }) .subscribe(new Action1<String>() { @Override public void call(String s) { textView.setText(s); } });
map()操作符就是用于变换Observable对象的,map操作符返回的是Observable对象,这样就实现链式调用,在一个Observable对象上多次运用map操作符,最终将简洁的数据传送给Subscriber对象。
map操作符进阶
map操作符更有趣的一点是它不必返回Observable对象返回的类型,你可以使用map操作符返回一个发出新的数据类型的observable对象。
比如上面的例子中,subscriber并不关心返回的字符串,而是想要字符串的hash值。
Observable.just("John").map(new Func1<String, Integer>() { @Override public Integer call(String s) { return s.hashCode(); } }) .subscribe(new Action1<Integer>() { @Override public void call(Integer i) { textView.setText(Integer.toString(i)); } });
可以得出字符串的hash值。
前面说过Subscriber所做的事情越少越好,我们再增加一个map操作符,如
Observable.just("John").map(new Func1<String, Integer>() { @Override public Integer call(String s) { return s.hashCode(); } }).map(new Func1<Integer, String>() { @Override public String call(Integer integer) { return Integer.toString(integer); } }).subscribe(new Action1<String>() { @Override public void call(String s) { textView.setText(s); } });
现在我们只需要知道两点:
1.Observable和Subscriber可以做任何事情
Observable可以进行数据查询,Subscriber用来显示结果;Observable是屏幕上的点击事件,Subscriber用来响应事件;Observable可以是网络请求,Subscriber用来显示请求结果。
2.Observable和Subscriber是独立于中间变换过程的
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度整合的,操作数据是一个很简单的过程。
声明:本文的内容来自博客:/article/2268010.html
相关文章推荐
- 容器重点总结一三六九JAVA142
- Java API —— Set接口 & HashSet类 & LinkedHashSet类
- Java中常见知识点
- (java)Contains Duplicate II
- 【ssh学习笔记】struts处理json异常之JSONWriter can not access a member of class org.springframework.aop.TruePoin
- (java)Rectangle Area
- MyEclipse 10创建包后变成文件夹的情况
- 通过JAVA代码获取手机的一些基本信息(本机号码,SDK版本,系统版本,手机型号)
- (java)Length of Last Word
- ajax+json+Struts2实现list传递实例讲解
- Java Web系列:Java Web 项目基础
- Struts2获取request的几种方式汇总(list对象获取)
- MyEclipse 10中对web.xml使用Format报错
- Java学习之final关键词
- struts2-OGNL和类型转换(structs 自动数据表单获取)
- Java输入输出 Stream
- 一致性HASH算法的JAVA实现
- 【ssh学习笔记】struts2的action与Spring
- java之设计模式--->策略模式
- 【Java EE 学习 73】【数据采集系统第五天】【参与调查】【导航处理】【答案回显】【保存答案】