Rxjava_map源代碼分析

ObservableA:
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
subscriber.onNext(1);
subscriber.onCompleted();
}
});

ObservableB:
.map(new Func1<Integer, String>() {
@Override
public String call(Integer integer) {
return "This is " + integer;
}
})

Subscriber_One:
new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.println("onCompleted!");
}
@Override
public void onError(Throwable e) {
System.out.println(e.getMessage());
}
@Override
public void onNext(String s) {
System.out.println(s);
}
}

ObservableB.subscribe(Subscriber_One)

分析:
ObservableB:
call
this.source = source; // ObservableA
this.transformer = transformer;
call(final Subscriber<? super R> o) {
MapSubscriber<T, R> parent = new MapSubscriber<T, R>(o, transformer);
//MapSubscriber的構(gòu)造函數(shù)
//this.actual = actual; Subscriber_One 對象
// this.mapper = mapper; 就是真是的map方法
o.add(parent);
source.unsafeSubscribe(parent);// 調(diào)用ObservableA的call
}

ObservableA:
call
call(Subscriber<? super Integer> subscriber) {
subscriber.onNext(1);
subscriber.onCompleted();
}
看MapSubscriber的onNext方法:
onNext(T t) {
R result;
try {
result = mapper.call(t); //調(diào)用 mapper的call: "This is " + integer
} catch (Throwable ex) {
Exceptions.throwIfFatal(ex);
unsubscribe();
onError(OnErrorThrowable.addValueAsLastCause(ex, t));
return;
}
actual.onNext(result); //actual Subscriber_One
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 怎么如此平靜, 感覺像是走錯了片場.為什么呢, 因為上下游工作在同一個線程呀騷年們! 這個時候上游每次調(diào)用emit...
    Young1657閱讀 1,680評論 2 1
  • 我從去年開始使用 RxJava ,到現(xiàn)在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy閱讀 5,777評論 7 62
  • 轉(zhuǎn)一篇文章 原地址:http://gank.io/post/560e15be2dca930e00da1083 前言...
    jack_hong閱讀 1,037評論 0 2
  • 1.移除現(xiàn)有的Ruby默認(rèn)源 1).gem sources --remove https://rubygems....
    9e5f2143c765閱讀 492評論 0 0
  • 2010-02-10 宵夜只兩桌客人,彈完《茉莉花》,有客人隔空喊話。 我抬頭。他用廣東話說:“笑傲江湖。” 我點(diǎn)...
    萬馬堂中花飛揚(yáng)閱讀 252評論 0 3

友情鏈接更多精彩內(nèi)容