RxJava 中的 Subject测试
时间:2022-05-16
本文章向大家介绍RxJava 中的 Subject测试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
PublishSubject
Publish是Subject的一个基础子类。发送订阅后的数据流。
PublishSubject<Integer> publishSubject = PublishSubject.create();
BehaviorSubject
BehaviorSubject会首先向他的订阅者发送截至订阅前最新的一个数据对象(或初始值),然后正常发送订阅后的数据流。
BehaviorSubject<Integer> behaviorSubject = BehaviorSubject.create(0);
我们创建了一个能发射整形(Integer)的BehaviorSubject。由于每当Observes订阅它时就会发射最新的数据,所以它需要一个初始值。
ReplaySubject
ReplaySubject会缓存它所订阅的所有数据,向任意一个订阅它的观察者重发:
ReplaySubject<Integer> replaySubject = ReplaySubject.create();
AsyncSubject
当Observable完成时AsyncSubject只会发布最后一个数据给已经订阅的每一个观察者。
AsyncSubject<Integer> asyncSubject = AsyncSubject.create();
测试
@Test
public void observerTest() {
PublishSubject<Integer> publishSubject = PublishSubject.create();
BehaviorSubject<Integer> behaviorSubject = BehaviorSubject.create(0);
ReplaySubject<Integer> replaySubject = ReplaySubject.create();
AsyncSubject<Integer> asyncSubject = AsyncSubject.create();
List<Subject> subjects = new ArrayList<>();
subjects.add(publishSubject);
subjects.add(behaviorSubject);
subjects.add(replaySubject);
subjects.add(asyncSubject);
for (Subject subject :
subjects) {
System.out.println("--------------------------------n" + subject.getClass().getSimpleName() + " start");
subject.onNext(-3);
subject.onNext(-2);
subject.onNext(-1);
subject.subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable e) {
System.out.println("onError(");
}
@Override
public void onNext(Integer integer) {
System.out.println(integer);
}
});
subject.onNext(1);
subject.onNext(2);
subject.onNext(3);
subject.onCompleted();
System.out.println(subject.getClass().getSimpleName() + " endn================================n");
}
}
--------------------------------
PublishSubject start
1
2
3
onCompleted
PublishSubject end
================================
--------------------------------
BehaviorSubject start
-1 # 如果前面没有发送数据, 此处会显示 0
1
2
3
onCompleted
BehaviorSubject end
================================
--------------------------------
ReplaySubject start
-3
-2
-1
1
2
3
onCompleted
ReplaySubject end
================================
--------------------------------
AsyncSubject start
3
onCompleted
AsyncSubject end
================================
- 扩展CakePHP的CacheHelper以使用缓存引擎
- 走进科学:酒店保险箱真的保险么?
- 利用xmlrpc.php对WordPress进行暴力破解攻击
- .Net中如何操作IIS
- Havex:以工控设备为狩猎目标的恶意软件
- 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
- 浅谈php安全
- 在统一的分析平台上构建复杂的数据管道
- 隐藏在注册表的恶意软件 – Poweliks
- 数千万WordPress和Drupal站点存在DDoS风险
- 利用基因突变和K均值预测地区种群
- 缓冲区溢出攻击初学者手册(更新版)
- 在Python机器学习中如何索引、切片和重塑NumPy数组
- HelloWorld,我的第一趟旅程出发点
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- iOS NSTimer不走的问题
- 我对python中的super()机制的一点理解
- 【Python】使用Pygame做一个Flappy bird小游戏(五)
- 【动手学深度学习笔记】之自定义层
- Ubuntu18.04系统安装和必备软件安装指南
- 如何查看微信好友已撤回的消息?
- 【Python爬虫】写一个爬取中国天气网的终端版天气预报爬虫
- 如何制定企业级代码规范与检查
- 哈希表:可以拿数组当哈希表来用,但哈希值不要太大!
- 【Python】Scrapy爬虫入门(一)Scrapy的基本用法和爬取静态网站
- 【动手学深度学习笔记】之读取和存储
- 据说这才是看热搜的正确方法?
- Ubuntu18.04安装Anaconda3和VSCode指南
- 微信小程序里如何使用npm?小程序集成友盟举例
- 听说你的表情包不够用了?