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