RxJava的Single、Completable以及Maybe

参考:

https://www.jianshu.com/p/45309538ad94

https://www.heqiangfly.com/2017/10/18/open-source-rxjava-single-completable-maybe/

类型 描述
Observable<T> 能够发射0或n个数据,并以成功或错误事件终止。
Flowable<T> 能够发射0或n个数据,并以成功或错误事件终止。 <br/>支持Backpressure,可以控制数据源发射的速度。
Single<T> 只发射单个数据或错误事件。
Completable 它从来不发射数据,只处理 onComplete 和 onError 事件。<br />可以看成是Rx的Runnable。
Maybe<T> 能够发射0或者1个数据,要么成功,要么失败。有点类似于Optional

我们常用的是Observable和Flowable,最常用的是Observable,今天我就看一下Single、Completable以及Maybe的用法。

Single

Single的SingleObserver中只有onSuccess、onError,并没有onComplete。这是 Single 跟其他四种被观察者最大的区别。其他的它的使用和Observable差不多

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();
            }
        });
​

Completable

Completable在创建后,不会发射任何数据。Completable 只有 onComplete 和 onError 事件,同时 Completable 并没有map、flatMap等操作符,它的操作符比起 Observable/Flowable 要少得多。

Completable.create(new CompletableOnSubscribe() {    @Override
    public void subscribe(@NonNull CompletableEmitter e) throws Exception {        e.onComplete();
        //e.onError(new Throwable("Error"));
    }
}).subscribeOn(AndroidSchedulers.mainThread())
        .observeOn(Schedulers.io())
        .subscribe(new CompletableObserver() {            @Override
            public void onSubscribe(@NonNull Disposable d) {            }
            @Override
            public void onComplete() {                Log.e("Test", "onComplete");
            }
            @Override
            public void onError(@NonNull Throwable e) {                Log.e("Test", "onError"+e.toString());
            }
        });

Maybe

Maybe 是 RxJava2.x 之后才有的新类型,可以看成是Single和Completable的结合。

Maybe创建之后,MaybeEmitter 和 SingleEmitter 一样并没有onNext()方法,同样需要通过onSuccess()方法来发射数据。

Maybe.create(new MaybeOnSubscribe<String>(){    @Override
    public void subscribe(@NonNull MaybeEmitter<String> e) throws Exception {        e.onSuccess("onSuccess");
        //e.onError(new Throwable("Error"));
        //e.onComplete();
    }
}).subscribeOn(AndroidSchedulers.mainThread())
        .observeOn(Schedulers.io())
        .subscribe(new MaybeObserver<String>() {            @Override
            public void onSubscribe(@NonNull Disposable d) {            }
            @Override
            public void onSuccess(@NonNull String s) {                Log.e("Test","onSuccess");
            }
            @Override
            public void onError(@NonNull Throwable e) {                Log.e("Test","onError");
            }
            @Override
            public void onComplete() {                Log.e("Test","onComplete");
            }
        });

RxJava的Single、Completable以及Maybe相关推荐

  1. 在Android中运用RxJava

    1.RxJava 2.0 1.1.什么是RxJava和响应式编程(reactive programming) 在响应编程中,消费者对数据进行反应,这就是为什么异步编程也被称为响应式编程的原因. 响应式 ...

  2. JAVA RxJava 2.x

    [JAVA RxJava 2.x] 为什么要学 RxJava? RxJava 最大的优点也是简洁,但它不止是简洁,而且是* 随着程序逻辑变得越来越复杂,它依然能够保持简洁 *. 咳咳,要例子,猛戳这里 ...

  3. 使用Spring Boot和RxJava的构建响应式REST API

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 我不打算解释什么是响应式编程,也不解释为什么要使用它.我希望你已经在其他地方了解过,如果没有 ...

  4. java singleresult方法_RxJava 第一篇 - Single使用及示例

    本文开始介绍RxJava的使用,和别的RxJava文章不同的地方在于我们直接从实战开始介绍,不讲那么多的花拳绣腿.好多RxJava启蒙文章都是你抄我我抄你,抄来抄去也就那么几个场景,换到自己的项目中还 ...

  5. java single_RxJava 第一篇 - Single使用及示例

    本文开始介绍RxJava的使用,和别的RxJava文章不同的地方在于我们直接从实战开始介绍,不讲那么多的花拳绣腿.好多RxJava启蒙文章都是你抄我我抄你,抄来抄去也就那么几个场景,换到自己的项目中还 ...

  6. Reactor实例解析

    \ 要点 \\ Reactor是一个运行在Java8之上的响应式流框架,它提供了一组响应式风格的API\\t 除了个别API上的区别,它的原理跟RxJava很相似\\t 它是第四代响应式框架,支持操作 ...

  7. RxLifecycle详细解析

    一.介绍 RxLifecycle目的:解决RxJava使用中的内存泄漏问题. 例如,当使用RxJava订阅并执行耗时任务后,当Activity被finish时,如果耗时任务还未完成,没有及时取消订阅, ...

  8. redis lettuce_Redis Client Lettuce 5 GA发布

    redis lettuce 经过13个月的开发阶段和208张已解决的故障单,我很高兴宣布Lettuce 5.0全面上市. 这是一个主要发行版,带有一些重大更改,新的有趣功能以及Java 9兼容性. 从 ...

  9. Redis Client Lettuce 5 GA发布

    经过13个月的开发阶段和208张已解决的故障单,我很高兴宣布Lettuce 5.0全面上市. 这是一个主要发行版,带有一些重大更改,新的有趣功能以及Java 9兼容性. 从Maven Central获 ...

最新文章

  1. Zookeeper的节点操作
  2. 64位userdata.dll丢失_有什么一劳永逸解决私钥丢失的方法吗?
  3. 与熊论道为什么解码不了_楼上熊孩子瞎蹦跳,楼下邻居投诉无果,一招吓哭“熊一家”...
  4. WPF ----在UserControl的xaml里绑定依赖属性
  5. bootstraptable列宽自适应内容_多列列表框行高和列宽的自适应调整
  6. vue.js环境部署
  7. linux c 笔记-1
  8. exce小技巧,Mac Excel单元格内换行快捷键
  9. java clob 操作_java操作clob字段
  10. 把14亿中国人都拉到一个微信群在技术上能实现吗?
  11. 雅虎邮箱 转发设置_如何在Yahoo Mail中设置外出答复
  12. 变速器 美国sram速联和日本shimano洗马路对比
  13. STM32H7 DMA USART空闲中断接收不定长数据
  14. Centos 7安装tig报错:include/tig/tig.h:83:31: fatal error: ncursesw/curses.h: No such file or directory
  15. 城市大脑与超级智能城市建设规范研究
  16. 文科生学计算机有前途吗,文科生学习计算机有难度吗?计算机的前景如何?
  17. python判断用户输入的数是正数还是负数
  18. Java中的集合父亲之collection使用和遍历方式--(单列集合顶级接口)
  19. Tableau 错误代码: 6EA18A9E,导入自定义地理时发生意外错误,无法完成操作
  20. 新浪微博OAuth认证和存储

热门文章

  1. 软件工程实训——点歌管理系统开发记录
  2. pm2启动node项目
  3. 鸿蒙蕴含的哲理,蕴含哲理的唯美句子,喜欢的就收藏吧!
  4. 你是否每天都认真洗手了?数据告诉你洗手时最容易忽视的部位有哪些
  5. 前端登录界面通用模版
  6. Java创建对象方式初谈
  7. 为什么ASFR下载的实时流媒体无法播放?
  8. visio画等分树状图
  9. Cadence Allegro使用过程中出现的常见问题-原理图和PCB
  10. java web聊天室论文_基于javaweb聊天室.doc