内容简介:我们在用
我们在用 RxJava
的时候,如果需要在某个地方需要中断事件流,那么直接返回一个 Observable.empty()
,与它有类似功能的有 Observable.never
。
Observable.just(1,2,3,4,5) .flatMap((Func1<Integer, Observable<Object>>) integer -> { if (integer > 3) { return Observable.empty(); //return Observable.never(); } else { return Observable.just(integer); } }) .subscribe(new Subscriber<Object>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable e) { System.out.println("onError"); } @Override public void onNext(Object o) { System.out.println("onNext"); System.out.println(Integer.valueOf(o.toString())); } });
Observable.never
的输出结果:
onNext 1 onNext 2 onNext 3
Observable.empty
的输出结果:
onNext 1 onNext 2 onNext 3 onCompleted
从结果可以看出来, Observable.empty
会执行 订阅者
的 onCompleted
方法, 而 Observable.never
方法则是立即终止整个流程。
源码分析(RxJava1.3.0):
public class Observable<T> { public static <T> Observable<T> never() { return NeverObservableHolder.instance(); } /***部分代码省略***/ public static <T> Observable<T> empty() { return EmptyObservableHolder.instance(); } }
public enum EmptyObservableHolder implements OnSubscribe<Object> { INSTANCE; static final Observable<Object> EMPTY = Observable.unsafeCreate(INSTANCE); @SuppressWarnings("unchecked") public static <T> Observable<T> instance() { return (Observable<T>)EMPTY; } @Override public void call(Subscriber<? super Object> child) { child.onCompleted(); } }
public enum NeverObservableHolder implements OnSubscribe<Object> { INSTANCE; static final Observable<Object> NEVER = Observable.unsafeCreate(INSTANCE); @SuppressWarnings("unchecked") public static <T> Observable<T> instance() { return (Observable<T>)NEVER; } @Override public void call(Subscriber<? super Object> child) { // deliberately no op } }
Observable.empty()
和 Observable.never
我们从源码实现就可以看出来两者的功能。
文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦~!~!
想阅读作者的更多文章,可以查看我个人博客 和公共号:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C程序设计(第四版)
谭浩强 / 清华大学出版社 / 2010-6-1 / 33.00元
由谭浩强教授著、清华大学出版社出版的《C程序设计》是一本公认的学习C语言程序设计的经典教材。根据C语言的发展和计算机教学的需要,作者在《C程序设计(第三版)》的基础上进行了修订。 《C程序设计(第4版)》按照C语言的新标准C99进行介绍,所有程序都符合C99的规定,使编写程序更加规范;对C语言和程序设计的基本概念和要点讲解透彻,全面而深入;按照作者提出的“提出问题―解决问题―归纳分析”三部曲......一起来看看 《C程序设计(第四版)》 这本书的介绍吧!