对Observable发射的每一项数据应用一个函数,执行变换操作
这里new了一个MapSubscriber
Observable.just(1).map(new Func1<Integer, Integer>() {
@Override
public Integer call(Integer integer) {
return integer + 1;
}
}).subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
log(integer + "");
}
});
public final <R> Observable<R> map(Func1<? super T, ? extends R> func) {
return create(new OnSubscribeMap<T, R>(this, func));
}
创建了一个OnSubscribeMap
我们看下他的call函数
@Override
public void call(final Subscriber<? super R> o) {
MapSubscriber<T, R> parent = new MapSubscriber<T, R>(o, transformer);
o.add(parent);
source.unsafeSubscribe(parent);
}
这里new了一个MapSubscriber
然后unsafeSubscribe订阅了它,justd的时候会创建一个JustOnSubscribe,这里会调用它的的call,最终会回调到MapSubscriber的onNext等函数
@Override
public void onNext(T t) {
R result;
try {
result = mapper.call(t);
} catch (Throwable ex) {
Exceptions.throwIfFatal(ex);
unsubscribe();
onError(OnErrorThrowable.addValueAsLastCause(ex, t));
return;
}
actual.onNext(result);
}
这里会调用mapper的call函数,也即我们例子中传进去的函数
,然后用返回来的值调用真实Subscriber的onNext来达到map效果