rxjava笔记(2)

rxjava笔记(2)

map与flatMap的原理

map的原理,可以查看map的源码进行分析。
会发现map()其实调用了left方法
left的源码大致过程为:

return new Observable<R>(new OnSubscribe<R>() {
           @Override
           public void call(Subscriber<? super R> o) {
               try {
                   Subscriber<? super T> st = hook.onLift(operator).call(o);
                   try {
                       st.onStart();
                       onSubscribe.call(st);
                   } catch (Throwable e) {
                       if (e instanceof OnErrorNotImplementedException) {
                           throw (OnErrorNotImplementedException) e;
                       }
                       st.onError(e);
                   }
               } catch (Throwable e) {
                   if (e instanceof OnErrorNotImplementedException) {
                       throw (OnErrorNotImplementedException) e;
                   }
                   o.onError(e);
               }
           }
       });

可以看到,在left方法中,返回了一个新建的Observable对象
接下来具体分析可以看出:

  • left中生成了一个新的泛型为R的Observable对象
  • left后继续调用subscribe的时候,使用的OnSubscriber是新的Observable的onSubscribe对象
  • 新observable对象中的call回调中会执行onSubscribe对象的call方法,这个onSubscribe对象是老的Observable对象中的成员变量
  • rxjava的left方法利用上述实现了事件流中的对象的变换。非常的巧妙。将新的Subscriber和原始的Observable带来发布-订阅关系。思想有点类似于代理。

同理,flatMap于map的原理差不多,只是变换成了一个Observable对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容