在上篇文章中实现只是简单的认识了rxJava,这节来学习它的一些基本操作符,这才是rxjava的强大之处
参考:http://gank.io/post/560e15be2dca930e00da1083
先说两个重点:
1.Observable和Subscriber可以做任何事情
Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。
2. Observable和Subscriber是独立于中间的变换过程的。
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。
可能现在说不太了解,直接上代码,为了方便读者看,代码都是全部展开的
变换:(map)
所谓变换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列。
Observable.just("你好").map(new Func1<String, String>() { @Override public String call(String s) { return s + "-RxJava"; } }).subscribe(new Action1<String>() { @Override public void call(String s) { //字符串变成了 你好-RxJava textView.setText(s); } });
map 不仅仅局限于只是返回Observable对象返回的类型,我们可以使用map返回一个新的Observable对象,下面我们来看看
//变换字符操作 map() Observable.just("你好").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) { Log.i(TAG, s); } });由于让Subscribe尽可能做更少的操作,我们添加了第二个map,再一次转换,最后直接得到数据。
ok,上面说到的只是rxJava的基础知识,rxjava的强大之处在于它的操作符,下面继续来看,当你了解了它之后你一定迫不及待的更想学习它。
把字符串转成hash类型输出,当然,map的强大之处不仅仅在于此,这里只是一个简单的示例,更多的看官方文档
当然,map只是一对一的操作,那么如果要进行一对多的操作呢,要用到flatMap
Observable.just("hello world").flatMap(new Func1<String, Observable<String>>() { @Override public Observable<String> call(String s) { return Observable.just(s + "--nihao"); } }).subscribe(new Action1<String>() { @Override public void call(String s) { Log.i(TAG, s); } });注意:
map和flatmap虽然都是接受一个函数作为参数(Func1),但是返回值是不一样的,flatMap返回的是Observable类型,具体可看http://blog.csdn.net/new_abc/article/details/48025513
from:
它接收一个集合作为输入,然后每次输出一个元素给subscriber
String[] str = {"aaa", "bbb", "ccc"}; Observable.from(str).subscribe(new Action1<String>() { @Override public void call(String s) { Log.i(TAG, s); } });这里也可以用for循环实现,不过这样是不是更简单了呢,完全代替for循环
rxjava的操作符很多,当真正的掌握了之后肯定就会爱上它了
官方文档:https://mcxiaoke.gitbooks.io/rxdocs/content/topics/How-To-Use-RxJava.html