前言

本文最初是为部门内部培训而准备的,但经过一番调研发现,同事们用不惯 RxJava,并不是因为网上介绍 “怎么用” 的教程不够多,恰恰是因为,一上来就急着发车的教程无数、却从未有过哪篇教程 舍得用几句话的功夫点破 RxJava 操作符究竟为何方神圣、我们为什么要用、为什么要那样用。

Observable.just(1, 3, 5, 7, 9).map(i -> i + 1).filter(i -> i < 5).subscribe(getObserve());
复制代码

事实上,在相当长的一段时间里,我也和大部分人一样,只知道使用 RxJava 来完成异步回调,至于那些操作符,则是能不用尽量不用,因为不知道葫芦里卖的什么药,看不懂、不会用。

因此,本文的初衷绝不是翻译官方文档、教大家怎么用,而是旨在帮助大家对 RxJava 操作符 完成感性上的认识。鉴于本次培训的效果还不错、同事们听了都说好,我便在 GitHub 开源了全套操作符示例代码(不要慌,链接文末已给出)。如果你在阅读本文后觉得恍然大悟,原来 RxJava 操作符是这么回事,那么我的愿望也就达到了。

编程语言包含多种编程范式

我对操作符本质的顿悟,始于我对编程语言的理解。和你一样,我是做安卓开发,但有一天,我决定跳出 Java,从整个计算机科学的角度来学习和理解编程语言的本质,在这过程中,我接触了“编程范式”这个概念,了解到原来每个编程语言大都包含多种编程范式。

常见的编程范式有:命令式编程、声明式编程等。

以 Java 为例,咱们 Java 最主要的编程范式是命令式编程。命令式编程 即按顺序执行具体的命令,这些命令不仅交待了做什么,还详细交待了每一步怎么做

SQL 也是种编程语言,是一种典型的声明式编程。声明式编程的特点是,只交待做什么,但无须交待怎么做

操作符的本质是声明式编程

下面回到我们最初的问题上来。你之所以用不惯 RxJava 操作符,是因为你习惯性地使用命令式编程思维 来理解实际上是声明式编程的操作符。 学习操作符,就和你在大学里接受的 SQL 语句一样理所当然。

SQL 你是理解的,就是按一定的规则,向数据库中的数据声明你要做什么。

同理,RxJava 也是按一定的规则,向数据流声明你要做什么。

转换成代码,便成为以下这样。

Observable.just(1, 3, 5, 7, 9).map(i -> i + 1).filter(i -> i < 5).subscribe(getObserve());
复制代码

这样说,你理解了吗?

全套rejava编程的代码:

https://github.com/KunMinX/RxJava2-Operators-Sample

RxJava应该如何理解相关推荐

  1. 生怕认可java+flatmap,RxJava 好难理解的一个 FlatMap 的例子

    需求是获取系统所有的文件,代码如下: File file = new File(Environment.getExternalStorageDirectory().getPath()); //定义一个 ...

  2. Android【Retrofit(HTTP客户端),RxJAVA(响应式编程)】

    1 Retrofit(HTTP客户端) 1.1 简介 我们项目当中的每个app都需要用到网络和服务器进行交互,在Android项目开发中使用HTTP协议完成通信的话,基本上都要用到OkHttp或者Re ...

  3. Retrofit+OKHttp+RxJava的使用

    什么是响应式编程   响应式编程是一种基于异步数据 流概念的编程模式.数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一 条流合并为一条新的流. 什么是RxJava RxJava ...

  4. 一个程序员的日常书单(更新于2018/10/7)

    今日元宵节,祝各位节日快乐. 本想谈谈读书这个话题,想来想起觉得无从下手,就此作罢.毕业这几年,一直不敢放松,在现代这个互联网时代更加认同萧抡谓的"一日不读书,胸臆无佳想;一月不读书,耳目失 ...

  5. 学了七年Android,连【架构师筑基必备技能】都不知道有什么

    二.成为架构师必备技能 思维脑图 基础知识 Java语言进阶 泛型与注解在Retrofit中的应用 多线程与Java File IO操作应用实战 Rxjava原理分析 JVM与内存泄漏原理解析 Cla ...

  6. 一年半Android工作经验剑指杭州:我是如何拿下头条、阿里和滴滴 offer 的

    BroadcastReceiver的不同类型,普通广播,系统广播.有序广播.粘性广播.应用类广播 Fragment相关 Fragment生命周期 Fragment的懒加载 Fragment之间的通信 ...

  7. D-Day 2016 技术分享精选,大牛们的经验漫谈

    2016 上半年,我们举办了 10 场 D-Day 技术沙龙,邀请到业内 40 多位重量级嘉宾,为数千位开发者带来了他们在各自领域的技术实践分享.这些精彩的议题,获得了高达 85% 的参与者满意度,绝 ...

  8. [转载]一个程序员的日常书单(更新于2018/10/7)

    本想谈谈读书这个话题,想来想起觉得无从下手,就此作罢.毕业这几年,一直不敢放松,在现代这个互联网时代更加认同萧抡谓的"一日不读书,胸臆无佳想;一月不读书,耳目失清爽".如果非要给自 ...

  9. 一个程序员的日常书单

    本想谈谈读书这个话题,想来想起觉得无从下手,就此作罢.毕业这几年,一直不敢放松,在现代这个互联网时代更加认同萧抡谓的"一日不读书,胸臆无佳想;一月不读书,耳目失清爽".如果非要给自 ...

最新文章

  1. 慕课网_《RabbitMQ消息中间件极速入门与实战》学习总结
  2. 【More Effective C#】LINQ表达式与方法调用的映射
  3. mybatis 动态SQL-foreach标签
  4. 网站流量预测任务第一名解决方案:从GRU模型到代码详解时序预测
  5. mysql服务重启后不见了_太狗血!翔安已婚男出轨KTV服务员,致其怀孕后避而不见!情人上门讨要说法后原配妻子也......
  6. OSPFv3中LSA详解(九)——Prefix三元组详解
  7. eclipse如何下载插件
  8. 模型思考笔记2—分类和同群效应带来的思考
  9. 某侠图床源码 图片外链服务 带API
  10. WEB开发(2) Servlet
  11. 第五章:用Python分析商品退单数据并找出异常商品
  12. 重磅!《深度学习 500 问》已更新,(附完整下载)
  13. mock详细教程入门这一篇就够了(*)
  14. 爬取我爱我家租房信息时 问题总结(付代码)
  15. heidisql修改mysql密码_读取HeidiSQL 配置文件中的密码
  16. 单人登录-踢下线功能实现
  17. 公众号如何发布一个投票活动
  18. [wx·part]微信小程序通过positon:absolute布局解决元素浮动显示后,如何设置显示位置问题
  19. 前端开发常见笔试题(附答案)
  20. java迷题_Java谜题3:汽车

热门文章

  1. Scoped CSS规范草案
  2. Effective c++读书笔记
  3. jQuery 插件写法
  4. EasyMock的原理及使用方法
  5. 三类MySQL_Mysql中的三类锁,你知道吗?
  6. potato什么软件_曝光:诈骗数十亿的“张鹏”再出新项目美生在线,诈骗犯都这么努力,你还有什么资格不努力!?...
  7. chord协议模拟实现_VB.NET和单片机串口通信实现监控单片机数字量输入继电器输出模拟量输入模拟量输出...
  8. 购物网站注册页面html,电商购物网站 - 实现注册
  9. 安装linux到服务器配置,CentOS 6.3 服务器安装配置
  10. UI设计灵感|精美的登录页让你对这些网站好感倍生!