RxJava2-map操作符源码解析

本文详细介绍了RxJava2中map操作符的工作原理及其实现机制,包括其涉及的关键类如Observable、ObserverOnSubscriber、Observer等,以及map操作符的具体调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RxJava2的map操作符用于对输入对象进行转换。

img_ea8733a04868a64e6e2a9ed9650ae03c.png
map操作图

下图所示为将String的输出转化为Integer的场景。

img_0c285006f23bc6765a033c68aade48b2.png
String转Integer

Map的源码解析如下,首先涉及到以下几个类:

1、Observable:被观察者,通过Observable.create创建一个被观察者,即观察者模式里面的主题Subject对象。被观察者对象通过ObservableEmitter发送消息给观察者

2、ObserverOnSubscriber:类似于观察者模式中的用来通知被观察者的notifyObserver接口。

3、Observer:观察者实现类

4、subscriber方法:订阅,Observer观察者订阅Observable内容。

5、ObservableCreate:调用Observerable.create生成的类。

6、ObservableMap:调用map后生成的对象。

7、Function:将String转化为Integer的函数。

8、MapObserver:map后再subscribe生成的观察者,内部保存了原始的观察者,和Funcation函数。

下图所示的最基本的Map操作符用法涉及到的基本类。

img_2b08bc1b25901aaf2026b3f50ab7d292.png
基本的类

下图所示为map操作符的调用序列图:

img_a0ade401973d250a224c6bdcc8d9330e.png
map操作序列图

1、Observable.create(ObservableOnSubscribe)会创建ObservableCreate对象,并将ObservableOnSubscribe赋值给ObservableCreate的source变量。

2、Observable.map(Function),此时实际的Observable是ObservableCreate对象,map会创建ObservableMap对象,并将ObservableCreate赋值给source变量,将Function函数赋值给function变量。

3、Observable.subscribe(Observer),此时实际的Observable是ObservableMap对象,操作流程如下:

        3.1、subscribe会调用ObservableMap的subscribeActual;该方法会在ObservableMap内部创建一个MapObserver(Function,Observer),传入原始Observer和Function函数;创建完MapObserver后会调用ObservableCreate.subscribe(MapObserver);

        3.2、ObservableCreate.subscribe(MapObserver)方法实际是调用父类Observable.subscribe(MapObserver)函数;

        3.3、调用Observable.subscribe(MapObserver)时,此时Observable对象实际是ObservableCreate,所以调用ObservableCreate.subscribeActual(MapObserver);

        3.4、ObservableCreate.subscribeActual会创建CreateEmitter(MapObserver),然后调用ObservableOnSubscribe.subscribe(CreateEmitter);

        3.5、最终调用到CreateEmitter.onNext(String),由于CreateEmitter已经传入了MapObserver,所以onNext会先调用Function.apply进行数据变换(这里也就是Integer.parseInt),得到变换后的数据后,在调用MapObserver中的原始Observer的onNext函数。自此,整个调用链结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值