RxJava基础知识
RxJava基础知识
一、引入依赖
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'implementation 'io.reactivex.rxjava2:rxjava:2.2.7'
二、转换操作符
2.1 create
private void testCrate() {Observable.create(new ObservableOnSubscribe<String>() {@Overridepublic void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {emitter.onNext("first");emitter.onComplete();}}).subscribe(new Observer<String>() {@Overridepublic void onSubscribe(@NonNull Disposable d) {Log.d(TAG,"onSubscribe " + d);}@Overridepublic void onNext(@NonNull String o) {Log.d(TAG,"onSubscribe " + o);}@Overridepublic void onError(@NonNull Throwable e) {Log.d(TAG,"onError " + e);}@Overridepublic void onComplete() {Log.d(TAG,"onComplete ");}});}
输出结果
2022-08-13 20:41:05.253 12124-12124/com.yhcode.rxjava D/MainActivity: onSubscribe CreateEmitter{null}
2022-08-13 20:41:05.255 12124-12124/com.yhcode.rxjava D/MainActivity: onSubscribe first
2022-08-13 20:41:05.255 12124-12124/com.yhcode.rxjava D/MainActivity: onComplete
2.2 just
just 1-10个参数,内部调用的是fromArray方法
private void testJust() {Observable.just("first","second","third").subscribe(new Observer<String>() {@Overridepublic void onSubscribe(@NonNull Disposable d) {Log.d(TAG,"onSubscribe");}@Overridepublic void onNext(@NonNull String s) {Log.d(TAG,"onNext:" + s);}@Overridepublic void onError(@NonNull Throwable e) {Log.d(TAG,"onError:" + e);}@Overridepublic void onComplete() {Log.d(TAG,"onComplete");}});}
输出结果
2022-08-13 20:56:48.905 12737-12737/com.yhcode.rxjava D/MainActivity: onSubscribe
2022-08-13 20:56:48.905 12737-12737/com.yhcode.rxjava D/MainActivity: onNext:first
2022-08-13 20:56:48.905 12737-12737/com.yhcode.rxjava D/MainActivity: onNext:second
2022-08-13 20:56:48.909 12737-12737/com.yhcode.rxjava D/MainActivity: onNext:third
2022-08-13 20:56:48.909 12737-12737/com.yhcode.rxjava D/MainActivity: onComplete
2.3 fromArray
和just的区别是,just内部调用的是fromArray,并且最多只能10个参数,而fromArray参数没有限制
private void testFromArray() {Observable.fromArray("one","two","three","four").subscribe(new Observer<String>() {@Overridepublic void onSubscribe(@NonNull Disposable d) {Log.d(TAG,"onSubscribe");}@Overridepublic void onNext(@NonNull String s) {Log.d(TAG,"onNext " + s);}@Overridepublic void onError(@NonNull Throwable e) {Log.d(TAG,"onError " + e);}@Overridepublic void onComplete() {Log.d(TAG,"onComplete");}});}
输出结果
2022-08-13 21:09:33.794 13144-13144/com.yhcode.rxjava D/MainActivity: onSubscribe
2022-08-13 21:09:33.794 13144-13144/com.yhcode.rxjava D/MainActivity: onNext one
2022-08-13 21:09:33.795 13144-13144/com.yhcode.rxjava D/MainActivity: onNext two
2022-08-13 21:09:33.795 13144-13144/com.yhcode.rxjava D/MainActivity: onNext three
2022-08-13 21:09:33.802 13144-13144/com.yhcode.rxjava D/MainActivity: onNext four
2022-08-13 21:09:33.802 13144-13144/com.yhcode.rxjava D/MainActivity: onComplete
2.4 fromIterable
参数可以接收为实现了Iterable接口的对象
private void testFromIterable() {List<String> list = new ArrayList<>();list.add("one");list.add("two");Observable.fromIterable(list).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {Log.d(TAG,"accept" + s);}});
输出结果
2022-08-13 21:17:52.470 13383-13383/com.yhcode.rxjava D/MainActivity: acceptone
2022-08-13 21:17:52.470 13383-13383/com.yhcode.rxjava D/MainActivity: accepttwo
2.5 fromFuture
private void testFromFuture() {Observable.fromFuture(new Future<String>() {@Overridepublic boolean cancel(boolean mayInterruptIfRunning) {return false;}@Overridepublic boolean isCancelled() {return false;}@Overridepublic boolean isDone() {return false;}@Overridepublic String get() throws ExecutionException, InterruptedException {return "from future result";}@Overridepublic String get(long timeout, TimeUnit unit) throws ExecutionException, InterruptedException, TimeoutException {return null;}}).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {Log.d(TAG,"accept:" + s);}});
输出结果
2022-08-13 21:21:24.496 13560-13560/com.yhcode.rxjava D/MainActivity: accept:from future result
2.6 fromCallable
private void testFromCallback() {Observable.fromCallable(new Callable<String>() {@Overridepublic String call() throws Exception {return "Callable";}}).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {Log.d(TAG,"accept " + s);}});}
输出结果
2022-08-13 21:24:43.179 13681-13681/com.yhcode.rxjava D/MainActivity: accept Callable
2.7 map
map 对事件进行处理
private void testMap() {//把aaa字符串转为大写Observable.just("aaa").map(new Function<String, String>() {@Overridepublic String apply(@NonNull String s) throws Exception {return s.toUpperCase();}}).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {Log.d(TAG,"aaa upper letter :" + s);}});}
输出结果
2022-08-13 21:35:29.839 13952-13952/com.yhcode.rxjava D/MainActivity: aaa upper letter :AAA
2.8 flatMap
flatMap会产生新的被观察者,模拟实现先注册账号,然后登录账号流程
private void testFlatMap() {Observable.just("user register for accont libo").flatMap(new Function<String, ObservableSource<?>>() {@Overridepublic ObservableSource<?> apply(@NonNull String s) throws Exception {return Observable.just(s + "begin login");}}).subscribe(new Consumer<Object>() {@Overridepublic void accept(Object o) throws Exception {Log.d(TAG,"login result:" + o);}});}
输出结果
2022-08-13 21:49:41.780 14359-14359/com.yhcode.rxjava D/MainActivity: login result:user register accountbegin login
2.9 Buffer
把事件按照传入buffer的数量为一组一起发送
Observable.just("li1","li2","li3","zhang1","zhang2","zhang3","wang1").buffer(3).subscribe(new Consumer<List<String>>() {@Overridepublic void accept(List<String> strings) throws Exception {Log.d(TAG,"result:" + strings);}});
输出结果
2022-08-26 08:49:03.639 13941-13941/com.yhcode.rxjava D/MainActivity: result:[li1, li2, li3]
2022-08-26 08:49:03.639 13941-13941/com.yhcode.rxjava D/MainActivity: result:[zhang1, zhang2, zhang3]
2022-08-26 08:49:03.639 13941-13941/com.yhcode.rxjava D/MainActivity: result:[wang1]
未完待续,持续更新
三、组合操作符
3.1 contact
contact 操作符将多个观察者组合在一起然后顺序发送,最多可以支持4个,如果需要支持超过4个,可以使用contactArray
Observable.concat(Observable.just("one"),Observable.just("two")).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {Log.d(TAG,"result:" + s);}});
输出结果
2022-08-26 09:00:39.715 14158-14158/com.yhcode.rxjava D/MainActivity: result:one
2022-08-26 09:00:39.716 14158-14158/com.yhcode.rxjava D/MainActivity: result:two
3.2 contactArray操作符
与contact操作符功能一样,差异是可以传入超过4个参数
Observable.concatArray(Observable.just("A"),Observable.just("B"),Observable.just("C"),Observable.just("D"),Observable.just("E"),Observable.just("F")).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {Log.d(TAG,s);}});
输出结果
2022-08-26 09:00:39.718 14158-14158/com.yhcode.rxjava D/MainActivity: A
2022-08-26 09:00:39.718 14158-14158/com.yhcode.rxjava D/MainActivity: B
2022-08-26 09:00:39.718 14158-14158/com.yhcode.rxjava D/MainActivity: C
2022-08-26 09:00:39.718 14158-14158/com.yhcode.rxjava D/MainActivity: D
2022-08-26 09:00:39.718 14158-14158/com.yhcode.rxjava D/MainActivity: E
2022-08-26 09:00:39.718 14158-14158/com.yhcode.rxjava D/MainActivity: F
3.3 merge
merge操作符与contact 类似都是将多个观察者组合在一起发送,区别是contact(contactArray)是串行发送,merge是并行发送
Observable observableOne = Observable.create(new ObservableOnSubscribe<String>() {@Overridepublic void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {Thread.sleep(2000);emitter.onNext("First Emitter");emitter.onComplete();}});Observable observableTwo = Observable.just("Second Emitter");Observable observableThree = Observable.create(new ObservableOnSubscribe<String>() {@Overridepublic void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {Thread.sleep(5000);emitter.onNext("Three Emitter");emitter.onComplete();}});Observable.merge(observableOne,observableTwo,observableThree).subscribe(new Consumer() {@Overridepublic void accept(Object o) throws Exception {Log.d(TAG,"result:" + o);}});
输出结果
2022-08-26 09:13:16.974 14297-14297/com.yhcode.rxjava D/MainActivity: result:First Emitter
2022-08-26 09:13:16.974 14297-14297/com.yhcode.rxjava D/MainActivity: result:Second Emitter
2022-08-26 09:13:21.975 14297-14297/com.yhcode.rxjava D/MainActivity: result:Three Emitter
源码下载
RxJava
RxJava基础知识相关推荐
- Android 动画基础知识学习(下)
1.属性动画 属性动画可以对任意对象的属性进行动画不仅仅是View,动画默认时间间隔是300ms,默认帧率是100ms/帧. 作用:在一个时间间隔内完成对一个对象从属性值到另一个属性值的改变. 三个常 ...
- 重拾java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~
又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...
- Android基础知识梳理
文章目录 系统架构 应用层 应用框架层 系统运行库层 硬件抽象层(HAL) Linux内核层 补充 通信方式 Binder IPC原理 Binder原理 Socket handler 主线程中 子线程 ...
- Swift常用基础知识(二)
Swift常用基础知识(一) 函数式编程 函数合成 func add1(_ v1: Int, _ v2: Int) -> Int { v1 + v2 }func currying<A, B ...
- Kotlin Flow响应式编程,基础知识入门
Kotlin在推出多年之后已经变得非常普及了.相信现在至少有80%的Android项目已经在使用Kotlin开发,或者有部分功能使用Kotlin开发. 关于Kotlin方面的知识,我其实分享的文章并不 ...
- 嵌入式Linux的OTA更新,基础知识和实现
嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
最新文章
- 浙大计算机知识基础,计算机基础知识题浙大远程
- halcon知识:【2】二维码原理
- ibatis迁移到mybatis3
- 机器学习实战-逻辑回归-19
- java中的数组、队列、堆栈
- 如何在Django1.6结合Python3.4版本中使用MySql
- Android之Bitmap学习总结
- go的实现接口的一个小demo
- 电脑时钟倒计时_倒计时久坐休息提醒工具
- 手机应用开发者必看:移动开发者大势图
- LeetCode_1905_连续子数组的最大和
- springboot中banner图制作
- DTOJ 2746. 皇后游戏(game)
- PPT的常用技巧(1):
- 学以致用——Java源码——员工薪酬系统功能增强(Payroll System Modification)
- win10计算机窗口览,Win10窗口预览管理工具
- Rocket简介(1)
- 基于Echarts的餐饮可视化平台
- 下面html标签元素中不属于块元素的是,HTML中为何P标签内不可包含块元素?
- 结构张量(structure tensor)
热门文章
- 抖音能做好OTA吗?
- 用sql dts导入mysql数据库,使用命令行导入sql文件到mysql数据库
- 自动白平衡(AWB)算法---2,色温计算
- 将纸质的电话号码导入到手机通讯录(二):使用网页版QQ同步助手将电话号码导入到手机通讯录...
- MBTI 热度爆火的需求分析
- 清炖墨鱼汤~熬夜必备
- VR全景调色软件(Lightroom)如何安装使用?
- AutoCAD2009中文版【32位】下载地址 仅供学习交流
- dede图片上传php,dedecms后台上传图片怎么实现图片轮播
- rar for android 中文版,安卓解压缩软件 Winrar for Android 6.02 中文专业版