操作符之功能性操作符
时间:2019-08-06
本文章向大家介绍操作符之功能性操作符,主要包括操作符之功能性操作符使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、作用
- 辅助被观察者(
Observable
) 在发送事件时实现一些功能性需求
2、类型
3、详解
3.1 subscribe() / subscribeOn() / observeOn()
作用:订阅 / 设置被观察者线程 / 设置观察者线程
3.2 delay() ----- 见rxdocs.pdf第157页
作用:使得被观察者延迟一段时间再发送事件
public static void delay() { Observable.just(1, 2, 3) .delay(3, TimeUnit.SECONDS) .subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe"); } @Override public void onNext(Integer value) { Log.d(TAG, "onNext: value = " + value); } @Override public void onError(Throwable e) { Log.d(TAG, "onError: " + e.toString()); } @Override public void onComplete() { Log.d(TAG, "onComplete"); } }); }
输出:
08-06 19:38:09.177 15886 15886 D Operation: onSubscribe
08-06 19:38:12.178 15886 15904 D Operation: onNext: value = 1
08-06 19:38:12.179 15886 15904 D Operation: onNext: value = 2
08-06 19:38:12.179 15886 15904 D Operation: onNext: value = 3
08-06 19:38:12.179 15886 15904 D Operation: onComplete
3.3 do() ----- 见rxdocs.pdf第161页
作用:在事件发送 & 接收的整个生命周期过程中进行操作
public static void doOperation() { Observable.just(1, 2) .doOnNext(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { Log.d(TAG, "doOnNext: value = " + integer); } }) .doOnLifecycle(new Consumer<Disposable>() { @Override public void accept(Disposable disposable) throws Exception { Log.d(TAG, "doOnLifecycle Consumer: disposable = " + disposable.isDisposed()); } }, new Action() { @Override public void run() throws Exception { Log.d(TAG, "doOnLifecycle Action"); } }) .doFinally(new Action() { @Override public void run() throws Exception { Log.d(TAG, "doFinally"); } }) .doAfterTerminate(new Action() { @Override public void run() throws Exception { Log.d(TAG, "doAfterTerminate"); } }) .doOnTerminate(new Action() { @Override public void run() throws Exception { Log.d(TAG, "doOnTerminate"); } }) .doOnSubscribe(new Consumer<Disposable>() { @Override public void accept(Disposable disposable) throws Exception { Log.d(TAG, "doOnSubscribe: disposable = " + disposable.isDisposed()); } }) .doOnError(new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Log.d(TAG, "doOnError"); } }) .doOnComplete(new Action() { @Override public void run() throws Exception { Log.d(TAG, "doOnComplete"); } }) .doAfterNext(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { Log.d(TAG, "doAfterNext: value = " + integer); } }) .doOnEach(new Consumer<Notification<Integer>>() { @Override public void accept(Notification<Integer> integerNotification) throws Exception { Log.d(TAG, "doOnEach: notification = " + integerNotification.toString()); } }) .doOnEach(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "doOnEach: onSubscribe"); } @Override public void onNext(Integer integer) { Log.d(TAG, "doOnEach: onNext = " + integer); } @Override public void onError(Throwable e) { Log.d(TAG, "doOnEach: onError"); } @Override public void onComplete() { Log.d(TAG, "doOnEach: onComplete"); } }) .doOnDispose(new Action() { @Override public void run() throws Exception { Log.d(TAG, "doOnDispose"); } }) .subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "real onSubscribe"); } @Override public void onNext(Integer value) { Log.d(TAG, "real onNext: value = " + value); } @Override public void onError(Throwable e) { Log.d(TAG, "real onError: " + e.toString()); } @Override public void onComplete() { Log.d(TAG, "real onComplete"); } }); }
输出:
08-06 20:10:46.205 18692 18692 D Operation: doOnLifecycle Consumer: disposable = false 08-06 20:10:46.205 18692 18692 D Operation: doOnSubscribe: disposable = false 08-06 20:10:46.205 18692 18692 D Operation: real onSubscribe 08-06 20:10:46.205 18692 18692 D Operation: doOnNext: value = 1 08-06 20:10:46.206 18692 18692 D Operation: doOnEach: notification = OnNextNotification[1] 08-06 20:10:46.207 18692 18692 D Operation: doOnEach: onNext = 1 08-06 20:10:46.207 18692 18692 D Operation: real onNext: value = 1 08-06 20:10:46.207 18692 18692 D Operation: doAfterNext: value = 1 08-06 20:10:46.207 18692 18692 D Operation: doOnNext: value = 2 08-06 20:10:46.207 18692 18692 D Operation: doOnEach: notification = OnNextNotification[2] 08-06 20:10:46.207 18692 18692 D Operation: doOnEach: onNext = 2 08-06 20:10:46.207 18692 18692 D Operation: real onNext: value = 2 08-06 20:10:46.207 18692 18692 D Operation: doAfterNext: value = 2 08-06 20:10:46.207 18692 18692 D Operation: doOnTerminate 08-06 20:10:46.207 18692 18692 D Operation: doOnComplete 08-06 20:10:46.207 18692 18692 D Operation: doOnEach: notification = OnCompleteNotification 08-06 20:10:46.207 18692 18692 D Operation: doOnEach: onComplete 08-06 20:10:46.208 18692 18692 D Operation: real onComplete 08-06 20:10:46.208 18692 18692 D Operation: doAfterTerminate 08-06 20:10:46.208 18692 18692 D Operation: doFinally
3.4 onErrorReturn() ----- 见rxdocs.pdf第151页
作用:遇到错误时,发送1个特殊事件 & 正常终止
原文地址:https://www.cnblogs.com/andy-loong/p/11311577.html
- 洛谷P2863 [USACO06JAN]牛的舞会The Cow Prom
- 洛谷P1908 逆序对(归并排序)
- 洛谷P1137 旅行计划
- 洛谷P1722 矩阵 II
- 洛谷P1976 鸡蛋饼
- 洛谷P1420 最长连号
- 各种读入方式速度比较
- 美团NLP实习面试总结一 基本知识4 数据结构二 NLP相关技术1 LSTM2 介绍实体链接与实体映射3 解释随机游走的原理及作用4 命名实体识别
- 【下载】苹果发布Turi Create机器学习框架,5行代码开发图像识别
- codevs 4163 hzwer与逆序对
- ASP.NET Core提供模块化Middleware组件
- CSS预处理器的对比 — sass、less和stylus
- Gensim实现Word2Vec的Skip-Gram模型简介快速上手对语料进行分词使用gensim的word2vec训练模型
- React第三方组件4(状态管理之Reflux的使用②TodoList上)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nginx+Keepalived 保障HA高可用
- Hash一致性闭环算法 - ( 适用于Redis扩容、Nginx多级缓存 等等 )
- MySQl 事务测试
- 百万数据,SQL数据分流查询
- Linux 安装Apr - 提高Tomcat 的可伸缩性和性能
- Linux下MySQL的彻底卸载
- Excel生成导入SQL语句,快速创建批量 insert/update/delete
- MySQL 执行计划详解
- MySQL 5.7详细安装步骤
- win10必备效率预览神器-Quick look
- 史上最全-Nginx和Tengine安装部署
- Jenkins+Ansible 实现自动化运维 DevOps
- FFmpeg 内容介绍 音视频解码和播放
- 开源:安卓手机app控制arduino,通过esp8266-01
- 聊聊dubbo-go的metricsFilter