自小编将通过一个图来分解,操作符前

3.3 ConcatMap()

  • 作用:类似FlatMap()操作符

  • FlatMap()的 差距在于:拆分 & 重新联合生成的轩然大波连串 的逐条 =
    被旁观者旧系列生产的依次

  • 原理

示意图

  • 利用场景
    稳步的将被观望者发送的整个事件体系进行转移

  • 现实应用

// 采用RxJava基于事件流的链式操作
        Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
            }

            // 采用concatMap()变换操作符
        }).concatMap(new Function<Integer, ObservableSource<String>>() {
            @Override
            public ObservableSource<String> apply(Integer integer) throws Exception {
                final List<String> list = new ArrayList<>();
                for (int i = 0; i < 3; i++) {
                    list.add("我是事件 " + integer + "拆分后的子事件" + i);
                    // 通过concatMap中将被观察者生产的事件序列先进行拆分,再将每个事件转换为一个新的发送三个String事件
                    // 最终合并,再发送给被观察者
                }
                return Observable.fromIterable(list);
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                Log.d(TAG, s);
            }
        });
  • 测试结果
示意图

注:新合并生成的风云系列顺序是铁定的事情的,即 严刻坚守旧种类发送事件的逐壹


  • RxJava功用强大,所以其对应的操作符的类型也不行多
  • 基于成效效能的不等,酷路泽xJava的操作符分类如下:

3.4 Buffer()

  • 作用
    期限从 被观望者(Obervable)须要发送的轩然大波中 获取一定数量的事件 &
    放到缓存区中,最终发送

  • 原理

示意图

  • 利用场景
    缓存被观望者发送的风浪

  • 切切实实使用
    那么,Buffer()老是是得到多少个事件放到缓存区中的呢?上边作者将经过2个事例来验证

// 被观察者 需要发送5个数字
        Observable.just(1, 2, 3, 4, 5)
                .buffer(3, 1) // 设置缓存区大小 & 步长
                                    // 缓存区大小 = 每次从被观察者中获取的事件数量
                                    // 步长 = 每次获取新事件的数量
                .subscribe(new Observer<List<Integer>>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }
                    @Override
                    public void onNext(List<Integer> stringList) {
                        //
                        Log.d(TAG, " 缓存区里的事件数量 = " +  stringList.size());
                        for (Integer value : stringList) {
                            Log.d(TAG, " 事件 = " + value);
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "对Error事件作出响应" );
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "对Complete事件作出响应");
                    }
                });
  • 测试结果

示意图

  • 进度解释

上边,小编将因此3个图来诠释Buffer()原理 & 整个例子的结果

示意图

至此,关于RxJava2中至关心珍视要的转移操作符已经讲解结束


图片 1示意图

欢迎关切Carson_Ho的简书!

不定期分享有关安卓开发的干货,追求短、平、快,但却不缺深度

三.五 过滤操作符

  • 职能过滤 / 筛选 被观察者(Observable)发送的风云 & 旁观者
    Observer)接收的事件

  • 利用场景

    1. 依照 钦命条件 过滤事件
    2. 基于 内定事件数量 过滤事件
    3. 依照 钦定时间 过滤事件
    4. 基于 钦点事件地点 过滤事件
  • 项目依据上述应用场景,常见的过滤操作符 主要有:

    图片 2示意图

  • 具体操作符 & 应用场景 详细介绍Android 中华VxJava:过滤操作符 周详授课

  • 实际支付需求案例下边,笔者将教师组合操作符的周边实际必要案例

该例子将组成RetrofitRxJava 举行讲解

  1. Android 帕杰罗xJava 实际运用讲解:功能防抖
  2. Android LacrossexJava 实际使用讲解:联想搜索优化

3.1 Map()

  • 作用
    对 被观看者发送的每1个事件都经过 钦点的函数
    处理,从而变换来其余1种事件

即, 将被观看者发送的风云转换为随机的品类事件。

  • 原理

示意图

  • 使用场景
    数据类型转换

  • 切切实进行使
    下边以将 使用Map() 将事件的参数从 整型 变换成 字符串类型
    为例子表达

示意图

 // 采用RxJava基于事件流的链式操作
        Observable.create(new ObservableOnSubscribe<Integer>() {

            // 1. 被观察者发送事件 = 参数为整型 = 1、2、3
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);

            }
            // 2. 使用Map变换操作符中的Function函数对被观察者发送的事件进行统一变换:整型变换成字符串类型
        }).map(new Function<Integer, String>() {
            @Override
            public String apply(Integer integer) throws Exception {
                return "使用 Map变换操作符 将事件" + integer +"的参数从 整型"+integer + " 变换成 字符串类型" + integer ;
            }
        }).subscribe(new Consumer<String>() {

            // 3. 观察者接收事件时,是接收到变换后的事件 = 字符串类型
            @Override
            public void accept(String s) throws Exception {
                Log.d(TAG, s);
            }
        });
  • 测试结果

示意图

从地点能够看出,map() 将参数中的 Integer 类型对象转换到多个
String类型 对象后再次来到

与此同时,事件的参数类型也由 Integer 类型变成了 String 类型


图片 3

6. 总结

  • 下边,作者将用一张图计算 RxJava2 中常用的转换操作符

示意图

  • 接下去的时辰,本身将持续生产 AndroidRxjava 2.0
    的一种种文章,包含原理、操作符、应用场景、背压等等

    ,有趣味可以一而再关注Carson_Ho的安卓开发笔记!!

示意图


  • 上面,笔者将对每类的操作符实行详细讲解

5. Demo地址

上述全数的Demo源代码都存放在:Carson_Ho的Github地址:RxJava2_更换操作符

欣赏的麻烦点个star


图片 4Github截图

三. 应用场景 & 对应操作符 介绍

  • 下面,我将对 RxJava2 中的变换操作符举行逐项讲解
  • 注:在使用RxJava 2操作符前,记得在项指标Gradle中添加正视:

dependencies {
      compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
      compile 'io.reactivex.rxjava2:rxjava:2.0.7'
      // 注:RxJava2 与 RxJava1 不能共存,即依赖不能同时存在
}

迎接关心Carson_Ho的简书!

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度

图片 5

1. 作用

  • 对事件种类中的事件 / 整个事件系列举办加工处理(即变换),使得其转变成分歧的轩然大波 / 整个事件系列
  • 现实原理如下

示意图


注:在使用RxJava 2操作符前,记得在类型的Gradle中添加依赖:

目录

示意图


  • RxJava如此那般受欢迎的原故,在于其提供了拉长 &
    成效强大的操作符,大概能实现具有的功力供给
  • 前几日,小编将为大家献上1份
    RxJava操作符的详细使用攻略,希望你们会欣赏。

3.2 FlatMap()

  • 职能:将被观望者发送的事件体系进行 拆分 &
    单独转换
    ,再统百分之十三个新的轩然大波类别,最后再举办发送

  • 原理

  1. 为事件体系中每一个事件都创立二个 Observable 对象;
  2. 将对每一个 原始事件 转换后的 新事件 都放入到对应 Observable对象;
  3. 将新建的各类Observable 都合并到叁个 新建的、总的Observable
    对象;
  4. 新建的、总的Observable 对象 将 新合并的事件序列发送给阅览者(Observer

示意图

  • 利用场景
    冬季的将被观察者发送的整整事件种类实行转换

  • 切实接纳

// 采用RxJava基于事件流的链式操作
        Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
            }

            // 采用flatMap()变换操作符
        }).flatMap(new Function<Integer, ObservableSource<String>>() {
            @Override
            public ObservableSource<String> apply(Integer integer) throws Exception {
                final List<String> list = new ArrayList<>();
                for (int i = 0; i < 3; i++) {
                    list.add("我是事件 " + integer + "拆分后的子事件" + i);
                    // 通过flatMap中将被观察者生产的事件序列先进行拆分,再将每个事件转换为一个新的发送三个String事件
                    // 最终合并,再发送给被观察者
                }
                return Observable.fromIterable(list);
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                Log.d(TAG, s);
            }
        });
  • 测试结果
示意图

注:新合并生成的风云系列顺序是冬日的,即 与旧连串发送事件的逐一非亲非故

叁.4 效率性操作符

  • 效果帮衬被观看者(Observable) 在出殡和埋葬事件时落实部分功能性须要

  • 实际上运用场景

  1. 连接 观看者 & 被观望者
  2. 线程调度
  3. 错误处理
  4. 事件生命周期操作
  5. 延时操作
  6. 再一次发送操作
  • 项目依据上述应用场景,常见的功能性操作符 首要有:

    图片 6示意图

  • 具体操作符 & 应用场景 详细介绍Android 景逸SUVxJava:功用性操作符 全面授课

  • 实质上付出需求案例上面,作者将教师组合操作符的广大实际必要案例

该例子将构成RetrofitRxJava 举办讲解

  1. Android 福特ExplorerxJava:细说 线程序控制制(含Retrofit实例讲解)
  2. Android CRUISERxJava 实际应用讲解:互联网请求出错重连(结合Retrofit)
  3. Android 汉兰达xJava 实际运用讲解:互连网请求轮询(结合Retrofit)

四. 实际付出供给案例

  • 转换操作符的基本点支出供给场景 = 嵌套回调(Callback hell
  • 下边,我将运用多个实际上应用场景实例来讲学嵌套回调(Callback hell

实际请看小说Android HighlanderxJava
实际运用案例教学:互连网请求嵌套回调


图片 7示意图

前言

  • Rxjava,由于其依照事件流的链式调用、逻辑简洁 &
    使用简便
    的性状,备受各大 Android开发者的欢迎。

Github截图

若果还相接解 RxJava,请看小说:Android:那是一篇 清晰 &
易懂的哈弗xjava 入门教程

  • RxJava这么受欢迎的来头,在于其提供了丰裕 &
    功能强大的操作符,差不多能不辱职分具有的功效供给
  • 后天,小编将为大家详细介绍RxJava操作符中最常用的转移操作符,并附带
    Retrofit 结合 RxJava的实例Demo教学,希望你们会欣赏。
  1. 本种类小说首要依照 Rxjava 2.0
  2. 接下去的日子,本身将持续生产 AndroidRxjava 2.0
    的1层层小说,包涵原理、操作符、应用场景、背压等等

    ,有趣味能够继续关切Carson_Ho的安卓开发笔记!!

示意图


图片 8示意图

2. 类型

  • RxJava广东中国广播公司泛的更换操作符如下:

    示意图

  • 上边,作者将对各个操作符进行详尽介绍

注:本文只讲解RxJava2在付出进度中常用的转移操作符


三.三 组合 / 合并操作符

  • 成效组合 多个被观望者(Observable) & 合并要求发送的轩然大波

  • 选择场景

    1. 组成五个被观察者
    2. 集合四个事件
    3. 出殡事件前扩张发送事件
    4. 计算算与发放送事件数量
  • 品种依据上述应用场景,常见的构成 / 合并操作符 主要有:

    图片 9示意图

  • 具体操作符 & 应用场景 详细介绍Android SportagexJava:组合 / 合并操作符
    详细教程

  • 事实上支付供给案例上边,笔者将执教组合操作符的宽广实际要求案例

该例子将组成RetrofitRxJava 进行讲解

  1. Android 翼虎xJava 实际行使讲解:合并数据源
  2. Android 福睿斯xJava 实际利用讲解:从磁盘 / 内部存款和储蓄器缓存中 获取缓存数据
  3. Android 奥德赛xJava 实际行使讲解:联合判断

请点赞!因为你的鞭策是自个儿撰文的最大重力!

有关作品阅读


本文全体代码 Demo均存放在Carson_Ho的Github地址

dependencies { compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' // 注:RxJava2 与 RxJava1 不能共存,即依赖不能同时存在}

图片 10示意图

三.一 创设操作符

  • 效果创建 被观望者( Observable) 对象 & 发送事件。

  • 使用场景

图片 11示意图

  • 种类依照上述应用场景,成立操作符的门类包蕴:

图片 12示意图

  • 具体操作符 & 应用场景 详细介绍Android 奥迪Q三xJava:最基础的操作符详解 –
    成立操作符

  • 实则开支要求案例下边,小编将教师创建操作符的二个附近实际供给案例:网络请求轮询

  1. 该例子将构成RetrofitRxJava 举行讲解
  2. 现实请看文章:Android CR-VxJava 实际采取讲解:网络请求轮询

3.陆 条件 / 布尔操作符

  • 功效通过设置函数,判断被观看者(Observable)发送的事件是还是不是符合条件

  • 类型RxJava2中,条件 / 布尔操作符的种类包蕴:

图片 13示意图

  • 具体操作符详解Android 奥德赛xJava:详解 条件 / 布尔操作符

至此,关于RxJava 2 中的操作符讲解截止。

  • 正文重要对 RxJava2
    中常用的全数品种操作符实行了详细介绍,上边用一张图进行计算

图片 14示意图

  • 接下去的时光,本身将随处生产 AndroidRxjava 2.0
    的一名目繁多小说,包罗原理、操作符、应用场景、背压等等

    ,有趣味能够继续关注Carson_Ho的安卓开发笔记!!

图片 15示意图

有关作品阅读

  • 操作符使用Android:那是一篇 清晰 & 易懂的揽胜极光xjava 入门教程Android
    QX56xJava:最基础的操作符详解 – 成立操作符Android 中华VxJava:图像和文字详解
    变换操作符Android LX570xJava:组合 / 合并操作符 详细教程Android
    奥迪Q7xJava:功用性操作符 周详讲解Android 路虎极光xJava:过滤操作符
    周到讲解Android XC90xJava:详解 条件 / 布尔操作符
  • 实则选择讲解Android 奥德赛xJava 实际选择讲解:网络请求轮询Android
    HavalxJava 实际运用讲解:网络请求轮询Android 科雷傲xJava
    实际行使讲解:网络请求嵌套回调Android 讴歌RDXxJava
    实际行使讲解:合并数据源Android CRUISERxJava 实际使用讲解:从磁盘 /
    内部存款和储蓄器缓存中 获取缓存数据Android 酷路泽xJava
    实际应用讲解:联合判断Android MuranoxJava:细说
    线程序控制制(含Retrofit实例讲解)Android 兰德君越xJava
    实际选取讲解:互连网请求出错重连(结合Retrofit)Android ENCORExJava
    实际运用讲解:互连网请求轮询(结合Retrofit)Android 哈弗xJava
    实际行使讲解:功用防抖Android 昂CoraxJava 实际使用讲解:联想搜索优化
  • 额外主要知识Android :周到解析LANDxJava 背压策略Android HummerH二xJava:二.0
    绝对于 一.0的翻新 & 变化(含 ENCORExJava
    1.0的立异使用)Android:Retrofit 结合 昂CoraxJava的幽雅使用

3.贰 变换操作符

  • 效用对事件系列中的事件 / 整个事件种类实行加工处理,使得其转变成分化的事件 / 整个事件种类
  • 切切实实原理

图片 16示意图

  • 选择场景嵌套回调(Callback hell

  • 花色依照上述应用场景,常见的转换操作符类型包括:

    图片 17示意图

  • 具体操作符 & 应用场景 详细介绍Android 大切诺基xJava:图像和文字详解 变换操作符

  • 其实开销必要案例下边,笔者将教师变换操作符的三个普遍实际需要案例:互联网请求嵌套回调

  1. 该例子将结合RetrofitRxJava 进行教学
  2. 现实请看小说:Android 中华VxJava 实际利用讲解:互联网请求嵌套回调

RxJava 操作符的切切实实简介如下:

要是还连连解君越xJava,请看小说:Android:那是壹篇 清晰 & 易懂的QX56xjava
入门教程

  • Rxjava,由于其依据事件流的链式调用、逻辑简洁 &
    使用简便
    的特色,非常受各大 Android开发者的欢迎。
  1. 本体系小说首要基于 Rxjava 2.0
  2. 接下去的年月,自己将持续推出 AndroidRxjava 2.0
    的一体系小说,蕴涵原理、操作符、应用场景、背压等等

    ,有趣味能够一连关切Carson_Ho的安卓开发笔记!!