资讯专栏INFORMATION COLUMN

RxJava变换操作符笔记

nidaye / 3266人阅读

摘要:变换操作摘抄自文档中文翻译对序列的每一项都应用一个函数来变换发射的数据序列将发射的数据集合变换为集合,然后将这些发射的数据平坦化的放进一个多带带的对发射的每一项数据应用一个函数,然后按顺序依次发射每一个值将分拆为集合,将原始发射的数据按分组,

变换操作

摘抄自Reactive X文档中文翻译

map 对序列的每一项都应用一个函数来变换Observable发射的数据序列

flatmap 将Observable发射的数据集合变换为Observables集合,然后将这些Observable发射的数据平坦化的放进一个多带带的Observable

scan 对Observable发射的每一项数据应用一个函数,然后按顺序依次发射每一个值

groupBy 将Observable分拆为Observable集合,将原始Observable发射的数据按Key分组,每一个Observable发射一组不同的数据

buffer 它定期从Observable收集数据到一个集合,然后把这些数据集合打包发射,而不是一次发射一个

window 定期将来自Observable的数据分拆成一些Observable窗口,然后发射这些窗口,而不是每次发射一项

map

map 对序列的每一项都应用一个函数来变换Observable发射的数据序列

//比如将每个字符串拼接上 
 from magicer
        String[] str = {"winter is coming","the king in the north"};
        Observable.from(str).map(new Func1() {
            @Override
            public String call(String s) {
                return s+"
 from magicer";
            }
        }).subscribe(new Action1() {
            @Override
            public void call(String s) {
                Log.i(TAG, "call: "+s);
            }
        });
    }
flatmap

flatmap 将Observable发射的数据集合变换为Observables集合,然后将这些Observable发射的数据平坦化的放进一个多带带的Observable

     //这里的nickName是个List
        Observable.from(mStudents).flatMap(new Func1>() {
            @Override
            public Observable call(Student student) {
                return Observable.from(student.getNickNames());
            }
        }).subscribe(new Action1() {
            @Override
            public void call(String s) {
                Log.i(TAG, "call: "+s);
            }
        });
scan

scan 对Observable发射的每一项数据应用一个函数,然后按顺序依次发射每一个值

 Observable.just(1,2,3,4,5).scan(new Func2() {
            @Override
            public Integer call(Integer integer, Integer integer2) {
                return integer+integer2;
            }
        }).subscribe(new Action1() {
            @Override
            public void call(Integer integer) {
                Log.i(TAG, "call: "+integer);
            }
        });
groupby

groupBy 将Observable分拆为Observable集合,将原始Observable发射的数据按Key分组,每一个Observable发射一组不同的数据

Observable.interval(1, TimeUnit.SECONDS).groupBy(new Func1() {
            @Override
            public Long call(Long aLong) {
                return aLong %2;
            }
        }).subscribe(new Action1>() {
            @Override
            public void call(final GroupedObservable result) {
                result.subscribe(new Action1() {
                    @Override
                    public void call(Long aLong) {
                         Log.i(TAG, "groupby call: "+aLong+" getKey:"+result.getKey());
                    }
                });
            }
        });
buffer

buffer 它定期从Observable收集数据到一个集合,然后把这些数据集合打包发射,而不是一次发射一个

Observable.interval(1,TimeUnit.SECONDS)
                .buffer(3,TimeUnit.SECONDS)
                .subscribe(new Action1>() {
                    @Override
                    public void call(List longs) {
                        Log.i(TAG, "call: "+longs);
                    }
                });
window

window 定期将来自Observable的数据分拆成一些Observable窗口,然后发射这些窗口,而不是每次发射一项
Window和Buffer类似,但不是发射来自原始Observable的数据包,它发射的是Observables,这些Observables中的每一个都发射原始Observable数据的一个子集,最后发射一个onCompleted通知。

 Observable.interval(1,TimeUnit.SECONDS)
                .window(3,TimeUnit.SECONDS)
                .subscribe(new Action1>() {
                    @Override
                    public void call(final Observable longObservable) {
                        longObservable.subscribe(new Action1() {
                            @Override
                            public void call(Long aLong) {
                                Log.i(TAG, "call: "+aLong);
                            }
                        });
                    }
                });

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/13540.html

相关文章

  • Java进阶之路

    摘要:探索专为而设计的将探讨进行了何种改进,以及这些改进背后的原因。关于最友好的文章进阶前言之前就写过一篇关于最友好的文章反响很不错,由于那篇文章的定位就是简单友好,因此尽可能的摒弃复杂的概念,只抓住关键的东西来讲,以保证大家都能看懂。 周月切换日历 一个可以进行周月切换的日历,左右滑动的切换月份,上下滑动可以进行周,月不同的视图切换,可以进行事件的标记,以及节假日的显示,功能丰富 Andr...

    sushi 评论0 收藏0
  • Rx系列学习 - 收藏集 - 掘金

    摘要:最近开始转移到掘金。要解决的问题支持切换网络请求地址,例如实现掘金前言以前在项目中使用,来进行事件通知与订阅。因此精华翻译掘金本人学习完了后,将值得重点注意的变化进行了翻译和归纳,适合正在使用的同学快速了解如果错误欢迎批评指正。 收藏安卓开发中非常实用优秀的库! 有图有真相! - Android - 掘金本来是打算收藏工具类的,但转念一想,已经有这么多优秀的库了,就没必要再去重复造轮子...

    kidsamong 评论0 收藏0
  • Rxjava实践-把混乱的WORKFLOW撸成串吧

    摘要:来吧,我们看看不用单个线程池,如何实现队列。也就是说,只有在上传成功时,继续执行下一个。最终执行的如下图好了,混乱的总算撸成串了。 前言 前几天和Stay(有心课堂创始人)讨论了一个rxjava场景,觉得很有意思,这里也和大家分享下。通过还原一个真实的开发过程,来感受下rxjava的便利之处。 不认识Stay的可以看看他的博客吧:http://www.jianshu.com/users...

    alighters 评论0 收藏0
  • 【腾讯Bugly干货分享】基于RxJava的一种MVP实现

    摘要:每周都会举行嘉宾分享,话题讨论等活动。本期,我们邀请了腾讯开发工程师戴俊,为大家分享基于的一种实现。分享内容简介是一个实现响应式编程的库,让异步事件以序列的形式组织。目前在腾讯动漫主要负责端的开发工作。接口的第二个作用是可以用来切换实现。 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57bfe... Dev Cl...

    DevTalking 评论0 收藏0
  • 扔物线:给 Android 开发者的 RxJava 详解

    摘要:观察者模式面向的需求是对象观察者对对象被观察者的某种变化高度敏感,需要在变化的一瞬间做出反应。规定,当不会再有新的发出时,需要触发方法作为标志。在事件处理过程中出异常时,会被触发,同时队列自动终止,不允许再有事件发出。 我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使...

    tianren124 评论0 收藏0

发表评论

0条评论

nidaye

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<