RxJava的Single、Completable以及Maybe

Rxjava2中Single,Completabley以及Maybe的内容;

参考地址: https://www.jianshu.com/p/45309538ad94

Single只发射单个数据或错误事件。

Maybe 能够发射0或者1个数据,要么成功,要么失败。有点类似于Optional


Completable 它从来不发射数据,只处理 onComplete 和 onError 事件。可以看成是Rx的Runnable。


Single的SingleObserver中只有onSuccess、onError,并没有onComplete。这是 Single 跟其他四种被观察者最大的区别。

Single.create(new SingleOnSubscribe<String>() {

            @Override
            public void subscribe(@NonNull SingleEmitter<String> e) throws Exception {

                e.onSuccess("test");
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(@NonNull String s) throws Exception {
                System.out.println(s);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(@NonNull Throwable throwable) throws Exception {
                throwable.printStackTrace();
            }
        });

上面的代码,由于Observer中有两个Consumer,还可以进一步简化成

Single.create(new SingleOnSubscribe<String>() {

            @Override
            public void subscribe(@NonNull SingleEmitter<String> e) throws Exception {

                e.onSuccess("test");
            }
        }).subscribe(new BiConsumer<String, Throwable>() {
            @Override
            public void accept(String s, Throwable throwable) throws Exception {
                System.out.println(s);
            }
        });

Single 可以通过toXXX方法转换成Observable、Flowable、Completable以及Maybe。


Completable 只有 onComplete 和 onError 事件,同时 Completable 并没有map、flatMap等操作符,它的操作符比起 Observable/Flowable 要少得多。

我们可以通过fromXXX操作符来创建一个Completable。这是一个Completable版本的Hello World。

Completable.fromAction(new Action() {
            @Override
            public void run() throws Exception {

                System.out.println("Hello World");
            }
        }).subscribe();

Completable 经常会结合andThen操作符

Completable.create(new CompletableOnSubscribe() {
            @Override
            public void subscribe(@NonNull CompletableEmitter emitter) throws Exception {

                try {
                    TimeUnit.SECONDS.sleep(1);
                    emitter.onComplete();
                } catch (InterruptedException e) {
                    emitter.onError(e);
                }
            }
        }).andThen(Observable.range(1, 10))
        .subscribe(new Consumer<Integer>() {
            @Override
            public void accept(@NonNull Integer integer) throws Exception {
                System.out.println(integer);
            }
        });
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 我想我不够温柔 无法用一朵花 舒展你的眉头 我想我应该放手 在你的眉头 看不见你对我的温柔 我想了很久 既想你留 ...
    简村小吹阅读 1,875评论 25 32
  • 今早看到香港女星阿娇,在网上晒出自己去刮痧后的裸背照,整个后背一片红赤的,她自己也惊呆了:“整块皮好像给撕掉了一样...
    五感自律研习社阅读 446评论 0 0
  • 在梦想离我一步之遥时,我竞擦肩而过。 也许高估了自己,也许自己储备不足,总之有点无奈,有点不知所措。 在朋友面前,...
    始于阅读 217评论 0 2
  • 第一章讲述了番茄工作法,在一天结束前要做的三件事情,记录、处理和可视化。将事情的重要性做一个评估,只去处理最重要的...
    c3123ce0d2b9阅读 289评论 0 0

友情链接更多精彩内容