您的位置:首页 > 编程语言 > Java开发

RxJava的map操作符

2015-12-17 19:55 561 查看
还是上面的例子,我们想在输出“John”的后面加一个字符串后缀“后缀”,我们很容易想到在Observable中修改输出的字符串

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: