RxJava操作符学习笔记

作者: 程序亦非猿 | 来源:发表于2015-09-16 20:53 被阅读18009次

操作符

操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件。
RxJava提供了很多很有用的操作符。

Subscribers更应该做的事情是“响应”,响应Observable发出的事件,而不是去修改。

所以修改就交给操作符吧.

Map

transform the items emitted by an Observable by applying a function to each item

用来把一个事件转换为另一个事件。
map()操作符就是用于变换Observable对象的,map操作符返回一个Observable对象,这样就可以实现链式调用,在一个Observable对象上多次使用map操作符,最终将最简洁的数据传递给Subscriber对象。

实效

特性:

  1. 它不必返回Observable对象返回的类型,你可以使用map操作符返回一个发出新的数据类型的observable对象。
  2. 可以对一个Observable多次使用map

用一个例子来练习:

//刚创建的Observable是String类型的
Observable.just("Hellp Map Operator")
.map(new Func1<String, Integer>() {
    @Override
    public Integer call(String s) {
        return 2015;//通过第一个map转成Integer
    }
}).map(new Func1<Integer, String>() {
    @Override
    public String call(Integer integer) {
        return String.valueOf(integer);//再通过第二个map转成String
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

Run起来输出日志:

2015

From

convert various other objects and data types into Observables

from()接收一个集合作为输入,然后每次输出一个元素给subscriber.

  1. from(Iterable<? extends T> iterable)
  2. from(T[] array)
from

看个例子,将集合的数据都输出:

List<String> s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift");
Observable.from(s).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

Log:

Java
Android
Ruby
Ios
Swift

另外from也接受数组类型:

Observable.from(new String[]{"Java","Android"}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

FlatMap

transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable

Observable.flatMap()接收一个Observable的输出作为输入,同时输出另外一个Observable。

微信公众号

相关文章

网友评论

  • 捡淑:mark
  • 8314e3a0c30e:我竟然有点看懂了
    程序亦非猿:@赵丰年 厉害
  • Bigmercu:非常好,简单明了。
    程序亦非猿:@Bigmercu 谢谢
  • Zinfinite:有没有遇到过经过flatMap变换后,list中的数据打印不全的问题?最多只能打印16条,没有加filter和take
    程序亦非猿: @Zinfinite 没有诶
  • 78552b4c87e8:文章中的第一张和第四张图,始终加载不出来,我用手机看的,是不是图片太大了,没有压缩呀。
    程序亦非猿:@马琳 我居然无视了马总...
  • 78552b4c87e8:这篇文章依旧简单明。
    程序亦非猿:@马琳 因为只是个笔记 所以只是我练习了什么就写什么 ,没想太多
    程序亦非猿:@马琳 少个了 :stuck_out_tongue_winking_eye:
  • 78552b4c87e8:听说将所有的字符串拼接“+”换成StringBuffer和Android更配哦。
  • 78552b4c87e8:听说System换成Log和Android更配哦。
    程序亦非猿:@马琳 因为我是在java里练习的..
  • 78552b4c87e8:map()和FlatMap()中的Fuc1可以说明一下,有些初次看有些疑惑。好像还有Fuc0
    程序亦非猿:@马琳 哈哈 留给读者去看吧 我没想写太多 :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:
  • 78552b4c87e8:FlatMap中的增加个前缀的函数:addPre中字符串操作使用:StringBuffer比较好。
    程序亦非猿:@马琳 恩恩 ~ 只是我用作练习 没管这么多
  • 78552b4c87e8:FlatMap中第一个例子的日子输出没有前两个。_from:Java和_from:Android.
    程序亦非猿:@马琳 对对 你好仔细
  • 78552b4c87e8:Map特性1.它不必返回Observable对象返回的类型,有些拗口,难懂耶。可以说清楚一点。或者换个说法。
    程序亦非猿:@马琳 恩 好~
  • 78552b4c87e8:from()接收的参数。应该多说一下。from(T[]) 或者from(Iterable<? extends T>)
    程序亦非猿:@马琳 恩恩
  • 78552b4c87e8:原理图看不见了。
    程序亦非猿:@马琳 我这里可以看到的诶
  • Q的博客:你好,讲很透彻简练,用了rxjava好一阵了,能加个好友一起交流吗? 我的qq是846059677
    6ec964d20b37:你好,846059677 验证答案是:郭继东
    程序亦非猿: @非 hi 不知道你收到没 加你需要回答问题。。。
    程序亦非猿: @非 加不了 答案我不知道
  • fuadam1982:以后多交流
    程序亦非猿: @fuadam1982 好 多指教
  • 程序亦非猿:我没留意这缩写 哈哈 孤陋寡闻了
  • fuadam1982:FRP是异步开发神器啊
    程序亦非猿:@fuadam1982 我没留意这缩写 哈哈 孤陋寡闻了 :relaxed:
    fuadam1982:@程序亦非猿 RxJava就是对Functional Reactive Programming的一个实现
    程序亦非猿: @fuadam1982 不知frp是啥。。
  • 小鄧子:其实也没那多操作符,你会发现,flatMap其实就是merge(map( ))。
    程序亦非猿:@小鄧子 我看源码里有提到merge
  • 微凉一季: :heart_eyes: 没太看懂,用这个东西的好处是啥呢,怎么感觉可读性变差了。。
    程序亦非猿:@微凉一季 没看懂你也喜欢-0- 哈哈 RxJava可以让你体验响应式编程,链式调用,写起来爽爽的.
    这里我没有用lambda表达式,如果用了的话 非常非常简洁,不过可读性确实有些变差如果看不懂的话...

本文标题:RxJava操作符学习笔记

本文链接:https://www.haomeiwen.com/subject/zlrbcttx.html