前言:

RxJava想必很多人都用过了,其实也是一早就接触过这个框架了,但是最近看了下一些关于是否需要使用RxJava的文章,对于RxJava的优点缺点有了更深的理解,然后看了论坛上有朋友提到很难理解Map,flatMap的区别,所以突然兴致来了,想写一点点东西,从源码出发简单的聊一下这两个方法的区别以及使用,通过通俗易懂的方式使大家能轻松简单的理解他们,好的让我们开始吧:

首先我看来看看RxJava的一些基本概念:

RxJava 简介:

RxJava是 ReactiveX 在 Java 上的开源的实现。RxJava可以轻松处理不同运行环境下的后台线程或UI线程任务的框架。RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。

Observable(可观察者,即被观察者) 和 Subscriber(订阅者)是两个主要的类。在 RxJava 上,一个 Observable 是一个发出数据流或者事件的类,Subscriber 是一个对这些发出的 items (数据流或者事件)进行处理(采取行动)的类。

Observable 和Observer 通过 subscribe() 方法实现订阅关系。一个 Observable 的标准流发出一个或多个item,然后成功完成或者出错。一个 Observable 可以有多个 Subscribers,并且通过 Observable 发出的每一个 item,该 item 将会被发送到 Subscriber.onNext() 方法来进行处理。一旦 Observable 不再发出 items,它将会调用 Subscriber.onCompleted() 方法,或如果有一个出错的话Observable 会调用 Subscriber.onError() 方法。

RxJava里面两个关键的概念:Observable 与 Observer 即被观察者,与观察者,他们在RxJava里面对应的类分别为:class Observable 与 interface Observer ,Observer是 interface 里面定义了我们最经常见的三个方法,

public interface Observer {

void onCompleted();

void onError(Throwable e);

void onNext(T t);

}

但是我们在代码中一般不直接使用他,而是在代码里面经常看见实现了他的抽象类:

public abstract class Subscriber implements Observer, Subscription {

// represents requested not set yet

private static final Long NOT_SET = Long.MIN_VALUE;

private final SubscriptionList subscriptions;

private final Subscriber> subscriber;

/* protected by `this` */

private Producer producer;

/* protected by `this` */

private long requested = NOT_SET; // default to not set

protected Subscriber() {

this(null, false);

}

//省略以下方法

}

因为他是 abstract 也不能直接new出来,我们在使用中经常会new 他的匿名类来进行使用(注意:new匿名的abstract类并不是直接new 了abstract,底层而是会生成一个类,这个类继承了abstract,这个有机会展开给大家说)

Subscriber subscriber = new Subscriber() {

@Override

public void onNext(String s) {

Log.d("Rxjava", "Item: " + s);

}

@Override

public void onCompleted() {

Log.d("Rxjava", "Completed!");

}

@Override

public void onError(Throwable e) {

Log.d("Rxjava", "Error!");

}

};

其中还有一个重要的概念就是 Observable.OnSubscribe 这个表示的是被监听者与监听者绑定以后会触发 OnSubscribe 里面的 call 方法,我们一般在 call 方法里面进行对于监听者 subscribe 的三个方法 onNext ,onCompleted,onError 的触发调用,使得整个调用过程像”链式“一样进行。

好了,我们现在再来看看RxJava的最最基本使用(

map原理 java_RxJava的基本原理以及Map,flatMap的原理相关推荐

  1. java的map是什么_java中的map是什么

    java中的map是一种依照键存储元素的容器.在map中键可以是任意类型的对象.map中不能有重复的键,每个键都有一个对应的值. Map是一个集合,一种依照键(key)存储元素的容器,键(key)很像 ...

  2. Java SE 第四十八,九,五十讲 Map深入详解及遍历Map的两种实现手段 Map.Entry详解与作业要求,作业讲解...

    1.Map接口:Map的实现类:HashMap类 Map没有add()方法,但是有put()方法. put()将指定的值关联到map中的特定key. 2.HashMap类: 3.vice versa: ...

  3. 置换贴图(Displacement map),凹凸贴图(Bump map)与法线贴图(Normal map)的区别

    英文原文地址<Difference between Displacement , Bump and Normap Maps> By Pluralsight on August 14, 20 ...

  4. Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qingfeng812/article/details/61194594 背景 记录项目中遇到的 关于 ...

  5. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 find 方法遍历 map 集合 | 代码示例 )

    文章目录 一.使用 map 集合的 find 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 find 方法遍历 map 集合 使用 map 集合的 find 方法遍历 map 集合 ...

  6. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 each 方法遍历 map 集合 | 代码示例 )

    文章目录 一.使用 map 集合的 each 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 each 方法遍历 map 集合 遍历 map 集合 , 可以调用 map 集合的 eac ...

  7. 【Groovy】map 集合 ( 根据 Key 获取 map 集合中对应的值 | map.Key 方式 | map.‘Key’ 方式 | map[‘Key’] 方式 | 代码示例 )

    文章目录 一.根据 Key 获取 map 集合中对应的值 1.通过 map.Key 方式获取 map 集合中的值 Value 2.通过 map.'Key' 方式获取 map 集合中的值 Value 3 ...

  8. map for循环_Java_foundations_1 如何遍历Map

    Java_foundations_1遍历Map 首先先整一个 Map 出来 private 1.只遍历 Map 的 Key @Test 2. 只遍历 Map 的 Value @Test 3. 使用 f ...

  9. java map类型转换_Java string类型转换成map代码实例

    背景:有时候string类型的数据取出来是个很标准的key.value形式,通过Gson的可以直接转成map 使用方式: Gson gson = new Gson(); Map map = new H ...

最新文章

  1. 设计包含min函数的栈
  2. 学好SQL--MySQL简单使用(3)
  3. python并行运算库_最佳并行绘图Python库简介:“ HiPlot”
  4. 我的世界java刷怪数量_Minecraft我的世界Java版18w16a更新发布
  5. vector 清空 Linux,STL容器vector基础用法小结
  6. 计算最小公倍数LCM
  7. IOS 支付宝支付开发流程
  8. Android eclipse加载项目出现红色感叹号
  9. FileUpload类中FileUpload1.FileName和FileUpload1.PostedFile.FileName的区别
  10. java 噪声信道模型_噪声信道模型zz
  11. 联想重装系统去掉保护_解决联想硬盘保护系统忘记密码问题,重新安装Windows10系统...
  12. 谷歌浏览器无法连接到网络的解决办法
  13. 同步AOKP源码的方法
  14. Coverage Path Planning(区域覆盖)
  15. 【基于时间特征交互和引导细化的遥感变化检测 】2022TGRS
  16. 你不可不知的Java引用类型之——SoftReference源码详解
  17. DICTATOR第三周栈与队列作业
  18. Linux 入门基本操作
  19. 基于stm32与陀螺仪(mpu6050)的PID角度环算法,角度用OLED显示,使得智能车能在长时间跑直线和转直角弯,减小误差
  20. 天池大赛-数智重庆比赛日志

热门文章

  1. OpenCV形态学变换函数morphologyEx()开运算的使用
  2. QString与LPCWSTR互转
  3. Laravel 上传图片及多张图片到七牛云
  4. Velocity模板引擎的简单使用
  5. MySql绿色版安装过程记录
  6. C# 跨程序集调用常量、变量和函数
  7. ckeditor_3.6.6.2+CKFinder2.0.2配置
  8. LDAP-GUI管理工具
  9. C#中的DateTime:本周,本月,今年,本周
  10. Sql Server 日期格式转换