RxJava基础知识

Isaac Sim仿真平台学习(2)系统架构 isaac sim系统架构 阅读详情

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>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("first");
                emitter.onComplete();
            }
        }).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.d(TAG,"onSubscribe " + d);
            }

            @Override
            public void onNext(@NonNull String o) {
                Log.d(TAG,"onSubscribe " + o);
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.d(TAG,"onError " + e);
            }

            @Override
            public 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>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.d(TAG,"onSubscribe");
            }

            @Override
            public void onNext(@NonNull String s) {
                Log.d(TAG,"onNext:" + s);
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.d(TAG,"onError:" + e);
            }

            @Override
            public 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>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.d(TAG,"onSubscribe");
            }

            @Override
            public void onNext(@NonNull String s) {
                Log.d(TAG,"onNext " + s);
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.d(TAG,"onError " + e);
            }

            @Override
            public 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>() {
            @Override
            public 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>() {
            @Override
            public boolean cancel(boolean mayInterruptIfRunning) {
                return false;
            }

            @Override
            public boolean isCancelled() {
                return false;
            }

            @Override
            public boolean isDone() {
                return false;
            }

            @Override
            public String get() throws ExecutionException, InterruptedException {
                return "from future result";
            }

            @Override
            public String get(long timeout, TimeUnit unit) throws ExecutionException, InterruptedException, TimeoutException {
                return null;
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public 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>() {
            @Override
            public String call() throws Exception {
                return "Callable";
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public 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>() {
            @Override
            public String apply(@NonNull String s) throws Exception {
                return s.toUpperCase();
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public 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<?>>() {
            @Override
            public ObservableSource<?> apply(@NonNull String s) throws Exception {
                return Observable.just(s + "begin login");
            }
        }).subscribe(new Consumer<Object>() {
            @Override
            public 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>>() {
            @Override
            public 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>() {
            @Override
            public 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>() {
                    @Override
                    public 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>() {
            @Override
            public 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>() {
            @Override
            public 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() {
            @Override
            public 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

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝 RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 dma,实现零拷贝. 阅读详情

相关推荐

Codesys软运动控制进阶:用SMC_FreeEncoder为ECAT轴搭建一个“虚拟手轮”调试工具

本文详细介绍了如何利用Codesys的SMC_FreeEncoder功能为ECAT轴搭建虚拟手轮调试工具,解决自动化设备开发中的硬件依赖问题。通过软件模拟手轮脉冲信号,实现无硬件依赖的运动控制逻辑验证,显著提升调试效率。适用于汇川AM400等PLC平台,特别适合机械安装滞后或伺服驱动器故障时的调试场景。

weixin_33737774的博客 477

RxJava学习笔记之Subscriber

Subscriber是订阅者需要实现的接口。 方法: public void onSubscribe(Subscription s); Publisher.subscriber(Subscriber)之后调用。 public void onNext(T t); 媒体发出来的数据通知。会继续 public void onError(Throwable t); 媒体发出来的错误通知。不会继续 pub...

楊帥 3398

USB3.0/3.1信号完整性分析仿真

• 1.了解USB3.0通路的互连关系,解读原理图接口电路和PCB的互连电路。对USB布线的通路及阻抗进行检查和分析。 • 2.使用USB3.0实例文件提取互连线的S参数,选择SSRX+,SSRX-,SSTX+,SSTX-,D+,D-组的互连线,使用PowerSI,Clarity,3DFEM等工具提起关键网络的S参数。提取S参数以后需要分析S参数的互连特征,对S参数的结果开展评价。 • 3.使用SYSTEM SI USB3 Compliance工程向导模型,建立USB仿真实例框架,在框架BOLCK中带入S参

小猪配齐电子设计 1万+

盘点常用的Android开发库(4 ) -- Rxjava2的基本使用

一、简介 二、使用 三、分析 四、参考链接

ledding的博客 1211

Alipay 支付唤起 h5 测试

测试地址 https://recharge.apps.oppomobile.com/recharge-center/recharge/?from=message try { //唤起客户端快捷参数 var data = {"requestType":"SafePay","fromAppUrlScheme":"alipays","dataString":"h5_ro...

六桥风月IT随笔 1万+

从3dB定向耦合器到双圆极化天线:在HFSS里玩转相位差90°的馈电艺术

本文详细介绍了在HFSS中设计3dB定向耦合器与双圆极化天线的关键技术,重点解析了90°相位差生成原理及馈电网络设计。通过HFSS仿真工具,实现从定向耦合器到完整天线系统的集成,优化阵列天线性能,适用于卫星通信和雷达系统。

weixin_33717117的博客 556

Android开发面试之RxJava,2024年最新安卓中高级面试题

发送主要通过上游的被观察者通知发射器,然后发射器会发送给下游的observer。onComplete是用来控制不能发送数据的,也就是不能onNext了,包括onError也是不能再发送onNext数据了,该方法中也是调用了dispose方法。从上面各个对应的observer接口来看,如果只想发一条数据,或者不发数据就用Maybe,如果想法多条数据或者不发数据就用Observable,如果只发一条数据或者失败就用Single,如果想用背压策略使用Flowable,如果不发数据就用Completable。

m0_60707708的博客 793

网络系统实现技术之IPX与SPX

IPX/SPXNovell NetWare网络Novell公司为适应网络发展,将主机网络转换为PC网络,开发了Novell NetWare网络系统。该系统中基于客户机/服务器模式。以普通PC机做为客户机,以性能强大的服务器做为服务器,为客户机提供文件服务、数据库服务及其他服务。与前面的SNA模型一样,Novell NetWare也早于OSI模型,所以不能与OSI模型严格对应,但也有很明

成片的大树 9164

RxJava3.0.0 操作符篇 - 过滤操作符

Debounce 仅在过了一段指定的时间还没发射数据时才发射一个数据,会过滤掉发射速率过快的数据项。 debounce 默认在 computation 调度器上执行,也可指定调度器。 Observable.range(1, 10) .flatMap((Function<Integer, ObservableSource<Integer>>) integer -> { int delay = new Random().nextInt(...

yangjunjin的博客 346

YOLO11涨点优化:小目标检测 | 多头检测器提升小目标检测精度

引入多头检测器助力YOLO11,添加一个微小物体的检测头暴力提升小目标检测性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4742

11.Labview实现用户界面切换的几种方式---通过VI间相互调用

本文介绍了界面切换的几种方式,分别是重入和引用①重入方式可以通过调用子VI的方式打开被调用的界面,往往应用于弹窗等的设置程序。②引用方式分两种,一种是打开引用,一种是静态引用。区别在于打开引用需要设置被打开VI的目标地址,静态引用仅需在引用时绑定VI的位置即可。③推荐使用静态引用的方式切换界面。④使用引用打开界面时,需通过属性节点和调用节点来设置程序的状态。更多内容欢迎大家补充和留言讨论~本文介绍了GUI界面设计相关的程序,更多相关文章后续持续更新,请关注作者不迷路~本期就到这里,再见~

关注我,更多技术问题欢迎私聊~ 9546

RxJava2.0功能性操作符(五)

1、subscribe() 作用:订阅,连接被观察者和观察者 //创建观察者 Observable observable=Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(@NonNull ObservableEmit

csclmf的博客 548

使用GitLab限制开发者使用CI/CD的权限,三种方案

使用三种方案来限制开发人员的CI/CD权限。

知无涯 5096

RxJava2极速入门——Rxjava理念与基础知识

目录 RxJava入门理念 函数响应式编程的概念及特点 函数编程概念 函数编程特性 响应式编程概念 响应式编程的特性 RxJava的基础知识 RxJava的创建 RxJava的生命周期回调 RxJava的五种观察者模式 Observable与Observer Flowable Single与SingleObserver Completable Maybe 总结心得 ...

易庞宙的博客 1720

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

彻底了解RxJava(一)基础知识,RxJava()基础知识

彻底了解RxJava(一)基础知识,RxJava()基础知识

qq_30519365的博客 919

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

彻底了解RxJava(一)基础知识

彻底了解RxJava(一)基础知识 ——欢迎转载,请注明出处http://blog.youkuaiyun.com/asce1885,未经本人同意请勿用于商业用途,谢谢—— 原文链接:http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/ 本文Gitbooks链接:http://asce1885.gitbooks.io/android-rd-...

zhangmiaoping23的专栏 143

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

理解RxJava:(一)基础知识

理解RxJava:(一)基础知识 本文翻译自Grokking RxJava, Part 1: The Basics,著作权归原作者danlew所有。译文由JohnTsai翻译。转载请注明出处,并保留此段声明。 RxJava这些天成为了Android开发者关注的新热点。唯一的问题是它在你刚接触时难以理解。当你习惯了命令式编程,函数响应式编程就变得难以理解。但是一旦你理解了它,它就变得很棒了...

didingyun4257的博客 166

RxJava 学习02 基础知识

next方法,就把当前数值+1

郭传志的博客 321

RxJava的基础知识

1、Observable 一、使用RxJava的三步骤 (1)、创建Observable 被观察者,使用RxJava需要一个被观察者,决定什么时候触发事件以及触发怎么样的事件,决定异步操作模块的顺序和异步操作模块的次数 (2)、创建Observer 创建一个处于待命状态的观察者哨兵,可以在未来某个时刻响应Observable的通知,...

krauser1991的博客 318

Rxjava基础知识

Rxjava基础支持 Observable: 一:Rxjava的Observable使用通常需要三步。 1:创建Observable(被观察者): Observable是Rxjava中的被观察者,Rxjava使用时需要创建一个被观察者, 他决定什么时候触发事件, 也就是被观察者发布信息. 2:创建Observer(观察者): Observer是观察者,用于接受Observable...

路漫漫其修远兮 453

RxJava 之基础知识

1. Observable RxJava 的使用通常需要三步 创建 Observable Observable 的字面意思是被观察者,使用 RxJava 时需要创建一个被观察者,它会决定什么时候触发事件以及触发怎样的事件。有点类似上游发送命令,可以在这里决定异步操作模块的顺序和异步操作模块的次数。 创建 Observer Observer 即观察者,它可以在不同的线程中执行任务。这种模式可以极大...

weixin_33827731的博客 137

RxJava2的基础知识

RxJava2的三要素: 观察者模式思想,函数响应式编程 1. Observable 被观察者,它决定什么时候触发时间,在上游发送命令,决定异步操作模块的顺序和异步操作的次数。 2. Observer 观察者,它可以在不同的线程中执行任务,在下游待命状态的接受事件,响应被观察者的通知。 3. subscribe订阅事件 创建好了Observable和Observer ,需要将他们...

HUandroid的博客 522

Android RxJava框架基础知识(二)

被观察者:Observable.java /** * 被观察者 * @param <T> */ public abstract class Observable<T> { //创建型操作 包装 public static <T> Observable create(Observable<T> observable) { return observable; } //事件订阅 public abs

xuyin1204的博客 364

RxJava 知识梳理(3) RxJava2 基础知识小结

前言 首先要感谢 Season_zlc 的一系列RxJava2的教程,关于上游、下游、水缸的类比,让我对于整个RxJava2的基本思想有了更加清晰的认识。大家有兴趣的话一定要多看看,写的通俗易懂,传送门:给初学者的 RxJava 2.0 教程 (一) ,本文的思想都来源于它的一系列文章。 文章比较长,为了避免耽误大家的时间,先列出需要介绍的知识点: 一、RxJava2 的基本模型 1.1 使用实...

weixin_33819479的博客 137

Android RxJava框架基础知识(一)

参考:Android RxJava :图文详解 背压策略

xuyin1204的博客 274

【RxJava 实践系列】(一)基础知识

【RxJava 实践系列】(一)基础知识 【RxJava 实践系列】(二)创建观察者与被观察者 【RxJava 实践系列】(三)线程控制 — Scheduler 【RxJava 实践系列】(四)创建操作 【RxJava 实践系列】(五)变换操作前言学习RxJava,从入门都放弃已经好几次了。首先由于RxJava上手的确有点小难度;其次她颠覆的我们传统的编程思想,她把编程像糖葫芦一样串起

Harlan的专栏 805
上一篇: Android 自定义View实现26个字母滑动索引
下一篇: Android自定义ViewGroup实现标签流式布局
libodev
博客等级 码龄14年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值