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基础知识相关推荐

  1. Android 动画基础知识学习(下)

    1.属性动画 属性动画可以对任意对象的属性进行动画不仅仅是View,动画默认时间间隔是300ms,默认帧率是100ms/帧. 作用:在一个时间间隔内完成对一个对象从属性值到另一个属性值的改变. 三个常 ...

  2. 重拾java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  3. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  4. Android基础知识梳理

    文章目录 系统架构 应用层 应用框架层 系统运行库层 硬件抽象层(HAL) Linux内核层 补充 通信方式 Binder IPC原理 Binder原理 Socket handler 主线程中 子线程 ...

  5. Swift常用基础知识(二)

    Swift常用基础知识(一) 函数式编程 函数合成 func add1(_ v1: Int, _ v2: Int) -> Int { v1 + v2 }func currying<A, B ...

  6. Kotlin Flow响应式编程,基础知识入门

    Kotlin在推出多年之后已经变得非常普及了.相信现在至少有80%的Android项目已经在使用Kotlin开发,或者有部分功能使用Kotlin开发. 关于Kotlin方面的知识,我其实分享的文章并不 ...

  7. 嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...

  8. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  9. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

最新文章

  1. 浙大计算机知识基础,计算机基础知识题浙大远程
  2. halcon知识:【2】二维码原理
  3. ibatis迁移到mybatis3
  4. 机器学习实战-逻辑回归-19
  5. java中的数组、队列、堆栈
  6. 如何在Django1.6结合Python3.4版本中使用MySql
  7. Android之Bitmap学习总结
  8. go的实现接口的一个小demo
  9. 电脑时钟倒计时_倒计时久坐休息提醒工具
  10. 手机应用开发者必看:移动开发者大势图
  11. LeetCode_1905_连续子数组的最大和
  12. springboot中banner图制作
  13. DTOJ 2746. 皇后游戏(game)
  14. PPT的常用技巧(1):
  15. 学以致用——Java源码——员工薪酬系统功能增强(Payroll System Modification)
  16. win10计算机窗口览,Win10窗口预览管理工具
  17. Rocket简介(1)
  18. 基于Echarts的餐饮可视化平台
  19. 下面html标签元素中不属于块元素的是,HTML中为何P标签内不可包含块元素?
  20. 结构张量(structure tensor)

热门文章

  1. 抖音能做好OTA吗?
  2. 用sql dts导入mysql数据库,使用命令行导入sql文件到mysql数据库
  3. 自动白平衡(AWB)算法---2,色温计算
  4. 将纸质的电话号码导入到手机通讯录(二):使用网页版QQ同步助手将电话号码导入到手机通讯录...
  5. MBTI 热度爆火的需求分析
  6. 清炖墨鱼汤~熬夜必备
  7. VR全景调色软件(Lightroom)如何安装使用?
  8. AutoCAD2009中文版【32位】下载地址 仅供学习交流
  9. dede图片上传php,dedecms后台上传图片怎么实现图片轮播
  10. rar for android 中文版,安卓解压缩软件 Winrar for Android 6.02 中文专业版