doAfterNext操作符的作用是每次调用onNext方法就会调用。
Observable.fromArray("1", "2", "3", "3", "4").doAfterNext(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println("doAfterNext: " + s);
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println("subscribe: " + s);
}
});
输出
subscribe: 1
doAfterNext: 1
subscribe: 2
doAfterNext: 2
subscribe: 3
doAfterNext: 3
subscribe: 3
doAfterNext: 3
subscribe: 4
doAfterNext: 4
看看源码
public final Observable<T> doAfterNext(Consumer<? super T> onAfterNext) {
...
return RxJavaPlugins.onAssembly(new ObservableDoAfterNext<T>(this, onAfterNext));
}
所以每次调用ObservableDoAfterNext类中onNext方法,就会调用 onAfterNext.accept(t);
public void onNext(T t) {
downstream.onNext(t);
if (sourceMode == NONE) {
try {
onAfterNext.accept(t);
} catch (Throwable ex) {
fail(ex);
}
}
}