RxJava基础知识

京东联盟API实战:5分钟搞定商品返利链接生成(附Python代码) 本文详细介绍了如何利用京东联盟API快速构建自动化商品返利链接生成系统。通过Python代码实战,从API申请、环境配置到核心功能封装,手把手教你实现批量商品信息查询与推广链接生成,帮助内容创作者和开发者大幅提升电商推广效率。 阅读详情

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

AgentVerse实战:构建多智能体协作系统的关键技术与应用场景 本文深入探讨了AgentVerse框架在构建多智能体协作系统中的关键技术及应用场景。通过分析智能体通信协议、环境交互机制和任务分解算法,展示了如何利用大型语言模型(LLM)实现智能体间的专业化分工与动态协作。文章还提供了智能软件开发团队和智能客服系统等典型应用案例,以及部署优化实践,为开发者构建高效的多智能体系统提供实用指导。 阅读详情

相关推荐

实用电路精讲系列---仪表放大器

摘要 仪表放大器通过三级运放架构实现高共模抑制比(CMRR>100dB)和精密差分放大,其核心是第一级同相运放提供高输入阻抗和可调增益(G=1+2R/RG),第二级差分运放消除共模干扰。具有低失调(≤50μV)、低温漂(≤0.6μV/℃)特性,广泛应用于智能断路器电流监测、ECG心电信号放大等场景。典型电路采用LTC1049运放,通过匹配电阻网络实现199倍差分增益,结合输出缓冲确保信号稳定性。设计时需注意输入共模电压范围限制和增益电阻精度,优选集成IC(如AD620、INA128)以规避分立元件匹配

weixin_40590799的博客 2072

RxJava学习笔记之Subscriber

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

楊帥 3398

CA(载波聚合)

文章目录CA基本概念1. CA分类2. Pcell、Scell以及Serving CellPcell(Primary Cell)Scell(Secondary Cell)3. Pcell、Scell部署场景场景1场景2场景3场景44. CA的协议控制4.1 Camping/Connetion Establishment:4.2 CC Management/SCell Addition/Release:4.3 Handover/Measurements:4.4 SCell激活 CA基本概念 CA也就是我们中文

你又来看我了,一起学习吧 4万+

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

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

ledding的博客 1211

ClickHouse集群扩容实战:用clickhouse-copier搞定数据迁移与分片重平衡

本文详细介绍了使用clickhouse-copier工具实现ClickHouse集群从3分片到5分片的平滑扩容实战。通过分片级并行处理、原子性保证等核心机制,该工具能高效完成数据迁移与分片重平衡,同时保持服务连续性。文章涵盖集群拓扑规划、表结构检查、迁移配置、执行监控及迁移后优化等关键步骤,为大数据量场景下的ClickHouse扩容提供完整解决方案。

weixin_29091837的博客 294

innovus:Patch Wire(补丁线)

1)选中wire ,shift+A使用Edit Route功能,F3打开edit route对话框。线道Create Patch Wire,设置好层次和宽度。在修补一些min area的drc时,会有一些danling wire的drc冒出来,为了避免这些假错,可以使用工具patch wire功能。2)沿着选中的wire画线即可。如下图,patch wire和regular wire是能看出区别的。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1963

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

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

m0_60707708的博客 793

PCL SVD分解求变换矩阵【2026最新版】

该算例使用奇异矩阵分解来求变换矩阵,输入的是同名点坐标输出的是变换矩阵。博客长期更新,本文最近一次更新时间为:2026年5月10日。

点云侠的博客 36万+

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

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

yangjunjin的博客 346

25 - GRACE Mascon数据缺失月份数据插值

本篇基于文章的相关内容和文章公开的奇异谱分析(SSA)插值算法程序包,对grace Mascon数据种缺失的月份进行 插值 ,总结了使用程序包的相关过程,可以将该程序应用到其他数据处理插值计算中。

weixin_43339605的博客 1842

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

csclmf的博客 548

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

易庞宙的博客 1720

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

qq_30519365的博客 919

彻底了解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

理解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、付费专栏及课程。

余额充值