前言:

昨天的两篇介绍了 RxJava 的创建类操作符和延时类操作符,今天笔者记录一下 转换类 操作符,不太监了 ,开始记笔记。对了具体不太清楚转换过程的 可以去拜读 这位大佬 Season_zlc 关于 map 等操作符的介绍 链接为:给初学者的RxJava2.0教程(三) 。

正文:

1、map 操作符

1)、作用

将观察者 发射的 数据 从发射类型 转换为 其它类型
多应用于数据类型转换

2)、代码
 /***  map 操作符*/private void mapMethod() {Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws Exception {emitter.onNext(111);emitter.onNext(222);emitter.onNext(333);emitter.onNext(444);}}).map(new Function<Integer, String>() {@Overridepublic String apply(Integer integer) throws Exception {return "将 Integer 类型数据转换为 String 类型数据:"+integer;}}).subscribe(new Observer<String>() {@Overridepublic void onSubscribe(Disposable d) {logDUtils("onSubscribe:");}@Overridepublic void onNext(String s) {logDUtils("onNext:" + s);}@Overridepublic void onError(Throwable e) {logDUtils("onError:"+e.getMessage());}@Overridepublic void onComplete() {logDUtils("onComplete:");}});}
3)、效果

被观察对象 在 map 操作符内 进行相应的转换 在观察者对象 得到 新的数据类型

2、FlatMap 操作符

1)、作用

将被观察者 发射的指定类型的一个数据 转换或拆分为 多个类型数据 发射给观察者的;
拆分之后的 数据 被重组为 一个新的被观察者 发射给 观察者;
新组建的被观察者 为无序。

2)、代码
 /*** FlatMap 操作符*/@SuppressLint("CheckResult")private void flatMapMethod() {Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws Exception {emitter.onNext(111);emitter.onNext(222);emitter.onNext(333);emitter.onNext(444);}}).flatMap(new Function<Integer, ObservableSource<String>>() {@Overridepublic ObservableSource<String> apply(Integer integer) throws Exception {List<String> list = new ArrayList<>();for (int i = 0; i < 3; i++) {list.add("从被观察者接收到的数据" + integer);}//为了验证 无序性 添加了 100 毫秒 的延迟操作return Observable.fromIterable(list).delay(100, TimeUnit.MILLISECONDS);}}).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {logDUtils("accept:" + s);}});}
3)、效果

3、concatMap 操作符

1)、作用

作用与 FlatMap 操作符相同 ,只是保证了有序性

2)、代码
  /*** ConcatMap 操作符*/@SuppressLint("CheckResult")private void concatMapMethod() {Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws Exception {emitter.onNext(111);emitter.onNext(222);emitter.onNext(333);emitter.onNext(444);}}).concatMap(new Function<Integer, ObservableSource<String>>() {@Overridepublic ObservableSource<String> apply(Integer integer) throws Exception {List<String> list = new ArrayList<>();for (int i = 0; i < 3; i++) {list.add("从被观察者接收到的数据" + integer);}//为了验证 有序性 添加了 100 毫秒 的延迟操作return Observable.fromIterable(list).delay(100, TimeUnit.MILLISECONDS);}}).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {logDUtils("accept:" + s);}});}
3)、效果

4、buffer 操作符

1)、作用

从被观察者内 拿到指定长度 的数据 缓存到缓存区内 打包一起发射给 观察者,当发射数据不够指定长度 则不再进行缓存。

2)、代码
/*** Buffer 操作符*/@SuppressLint("CheckResult")private void bufferMethod() {Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws Exception {emitter.onNext(111);emitter.onNext(111);emitter.onNext(222);emitter.onNext(222);emitter.onNext(333);emitter.onNext(333);emitter.onNext(444);emitter.onNext(444);}}).buffer(3).subscribe(new Consumer<List<Integer>>() {@Overridepublic void accept(List<Integer> integers) throws Exception {logDUtils("accept:" + integers);}});}
3)、效果

buffer 操作符还有另一个常用的方法

//参数:缓存数量   步长:从第一个还是计算,指定数据数量之后 再次进行缓存  可以取样用
public final Observable<List<T>> buffer(int count, int skip)

代码

 /*** Buffer 操作符*/@SuppressLint("CheckResult")private void bufferMethod() {Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws Exception {emitter.onNext(111);emitter.onNext(111);emitter.onNext(222);emitter.onNext(222);emitter.onNext(333);emitter.onNext(333);emitter.onNext(444);emitter.onNext(444);}}).buffer(2,3).subscribe(new Consumer<List<Integer>>() {@Overridepublic void accept(List<Integer> integers) throws Exception {logDUtils("accept:" + integers);}});}

效果

初识RxJava(三)转换类 操作符相关推荐

  1. RxJava进阶一(创建类操作符)

    RxJava进阶一(创建类操作符) RxJava进阶二(转换类操作符) RxJava进阶三(过滤类操作符) RxJava进阶四(组合类操作符) 前面已经对RxJava原理进行介绍,相信大家对于RXJa ...

  2. RxJava系列4(过滤操作符)

    前面一篇文章中我们介绍了转换类操作符,那么这一章我们就来介绍下过滤类的操作符.顾名思义,这类operators主要用于对事件数据的筛选过滤,只返回满足我们条件的数据.过滤类操作符主要包含: Filte ...

  3. 大话RxJava:一、初识RxJava与基本运用

    转:  http://www.jianshu.com/p/856297523728 .subscribeOn(Schedulers.io()) // 指定subscribe()发生在IO线程 ---& ...

  4. RxJava使用说明5-组合操作符

    RxJava使用说明1-简介 RxJava使用说明2-基本概念及使用介绍 RxJava使用说明3-转换操作符 RxJava使用说明4-过滤操作符 RxJava使用说明5-组合操作符 RxJava2更新 ...

  5. C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象

    重载操作符与转换 --调用操作符和函数对象 引言: 能够为类类型的对象重载函数调用操作符:一般为表示操作的类重载调用操作符! struct absInt {int operator() (int va ...

  6. python自学第8天字典_孤荷凌寒自学python第十一天初识Python的字典类

    孤荷凌寒自学python第十一天初识Python的字典类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的字典其实是一张二维对照表 下面举例说明: 键名Key 姓名 性别 身高 ...

  7. CImg库中CImg,CImgList,CImgDisplay三个类的介绍

    转自:http://www.cppprog.com/2009/0426/108.html 本文简单介绍了CImg库中的三个大类:CImg,CImgList,CImgDisplay.然后给出了让CImg ...

  8. RTKLIB专题学习(七)---精密单点定位实现初识(三)

    RTKLIB专题学习(七)-精密单点定位实现初识(三) 上两篇我们介绍了RTKLIB中精密单点定位的大致流程,今天我们对照RTKLIB学习手册,来学习相应改正公式和误差源 1.在PPP模式中 RTKL ...

  9. php农历生日计算,阴历-农历-转换类 (PHP版),阴历php

    阴历-农历-转换类 (PHP版),阴历phplunarInfo[$year-$this->MIN_YEAR]; if($year==$this->MIN_YEAR&&$mo ...

最新文章

  1. HTTP/2 h2 协议简介
  2. SQL Server2005的XML数据类型之基础篇 (2)
  3. 广汽研究院BMS软件工程师_八大高手齐聚CATIA决赛,3人获“广汽技术创新能手”...
  4. 深入解析阿里Android热修复技术原理
  5. springboot 跨域_SpringBoot跨域加SpringSecurity就失效
  6. linux_shell_根据网站来源分桶
  7. Annaconda下Python2.7路径
  8. Invalid byte 2 of 2-byte UTF-8 sequence解决方案
  9. BlackBerry 应用程序开发者指南 第二卷:高级--第4章 增加设备选项
  10. Ncurses 命令行图形库
  11. silverlight小结
  12. WIN10添加策略组
  13. pycharm 运行celery_调试celery遇到的坑
  14. PS和AE结合设计的进度条,有图有视频(秒懂)
  15. 保护眼睛的颜色和各种背景颜色设置方法
  16. android 锁屏后定时器,iOS锁屏或者后台计时器定时解决方法
  17. 基于51单片机的智能加湿控制器设计
  18. kali linux u盘 live,Kali Linux Live U盘安装过程
  19. centos6.7 安装端口映射工具 rinetd
  20. springboot 在线调整日志级别

热门文章

  1. 山东财经大学python实验六答案_金融学(山东财经大学)智慧树知道2020章节测验答案...
  2. 变速自行车的变速、省力原理与窍门
  3. element plus 表el-table的多个行列合并
  4. 在计算机软件中 BIOS的中文意思是,BIOS是什么意思?电脑主板bios在哪里?
  5. GPRS模块的使用与相应SOCKET服务器的搭建
  6. 为什么我讨厌开放式办公?
  7. POSIX 线程具体解释(3-相互排斥量:固定加锁层次/“试加锁-回退”)
  8. (目标检测)Faster R-CNN 论文解读+复现
  9. 【项目学习】C++实现高并发服务器——代码学习(一)Reactor高并发模型
  10. 世界各国国土面积排名