rxJava 学习之路(二)

来源:互联网 发布:苹果游戏制作软件 编辑:程序博客网 时间:2024/05/21 18:47

在上篇文章中实现只是简单的认识了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



0 0