RxJava3案例 - FromIterable + Buffer操作符联合应用场景

【PVCodeNet】《Palm Vein Recognition Network Combining Transformer and CNN》 1]吴凯,沈文忠,贾丁丁,等.融合Transformer和CNN的手掌静脉识别网络[J].计算机工程与应用,2023,59(24):98-109. 阅读详情

需求:资料下载页面,有一个一键批量下载功能,但是为了下载安全性考虑,每个下载都需要请求服务器动态生成一个下载的token,这就需要我们有多少个资料就调用多少次获取token的接口了。

实现代码:

Observable<List<MicroResponse<DownloadToken>>> observable = 
    //1、依次发送资料列表数据
    Observable.fromIterable(listDoc)
    //根据资料数据生成下载token
    .flatMap(new Function<DocBean, ObservableSource<MicroResponse<DownloadToken>>>() {
        @Override
        public ObservableSource<MicroResponse<DownloadToken>> apply(DocBean docBean) throws Exception {
            //请求接口,生成DownloadToken
            return mModel.createDownloadToken(docBean.docId);
        }
    })
    //2、通过buffer操作符将多个请求的结果合并
    .buffer(listDoc.size());

//订阅
observable
    .safeSubscribe(new SimpleSubscriber<List<MicroResponse<DownloadToken>>>() {
        @Override
        public void onNext(List<MicroResponse<DownloadToken>> resp) {
            //遍历所有结果,开始下载
        }
    });

解析:

1、依次发送资料列表数据

FromIterable操作符可以将列表数据依次发送出来,直到发送完所有数据。

这里使用FromIterable操作符替代for循环实现依次发送请求的动作,优点在于可以和其他Rxjava的操作符结合,而且数据流转换数据本身更便于理解。

2、通过buffer操作符将多个请求的结果合并

Buffer操作符起到一个缓冲的作用,将等待所有的事件都发送完成后,将所有的结果以集合的形式一起返回。

如果我们采用for循环去发送请求的话,那么对于返回结果的处理和管理都是不晓得工作量,而且为了获取所有请求结果都返回了,这个状态就需要加额外的计数、状态等字段来判断。通过FromIterable和Buffer操作符配合就完美解决了这个问题,可以订阅到所有请求都完成的时机,直接拿到所有的请求结果。


注意:因为这里请求很多,也需要考虑有个别请求异常的情况发生,可以使用OnErrorResumeNext操作符发送默认值来解决。

任务混部最少服务器数量计算问题 这里的并行度指的是该任务运行时会占用的服务器数量。要注意的是,一个服务器在每个时刻可以被任意任务使用,但同一时刻最多只能被一个任务占用,并且任务运行结束后会立即释放服务器(结束时刻不占用)。最后,我们从字典中找出服务器数量的最大值,这个最大值就是完成这批任务混部最少需要的服务器数量。对于每个任务,我们会遍历其对应的时间区间,将该任务的并行度累加到对应时刻的服务器数量上。任务混部的目标是让这批任务由同一批服务器承载运行,你需要计算完成这批任务混部最少需要多少服务器,以此来最大化控制资源成本。 阅读详情

相关推荐

Markdown编辑器介绍

这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。

soso1968的博客 1181

RxJava3案例 - FromIterable+Filter+Buffer实现列表数据过滤

RxJava案例 FromIterable+Filter+Buffer实现列表数据过滤

bigfc的博客 1471

360加固DEX解密与ELF修复技术解析

本文深入解析了360加固APK的逆向分析技术,重点探讨了其DEX解密与ELF文件修复的核心流程。通过动态调试与Frida脚本,详细拆解了壳的启动机制、反调试绕过、自实现Linker技术,并还原了基于RC4和自定义算法的多层DEX解密过程,为移动安全研究人员提供了实用的实战分析思路。

alice7model的博客 701

RxJava的学习之变换操作符—buffer

基本操作格式: 1. buffer(count) 2. buffer(count, skip) 3. buffer(bufferClosingSelector和buffer(boundary) 4. buffer(bufferOpenings, bufferClosingSelector) 5. buffer(timespan, unit[, scheduler])

源代码的博客 4612

最优化方法 25:PDHG

前面的章节要么从原始问题出发,要么从对偶问题出发,通过求解近似点或者一个子优化问题进行迭代,而且推导过程中我们发现根据问题的参数特征,比如矩阵 AAA 是瘦高型的还是矮胖型的,采用对偶和原始问题的复杂度会不一样,可以选择一个更简单的。而这一节,我们将要从原始对偶问题出发来优化,什么是原始对偶问题呢?就是原始优化变量和对偶优化变量(原始函数和共轭函数)混合在一块,看下面的原理就知道了。 1. 原始对偶问题 现在考虑原始优化问题,其中 f,gf,gf,g 为闭凸函数 min⁡f(x)+g(Ax) \min \q

Glooow的博客 4602

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包

激光雷达和相机联合标定(一)——ROS同步解包

qq_44703886的博客 4235

RxJava相关

RxJava2 只看这一篇文章就够了 参考文章:https://juejin.im/post/5b17560e6fb9a01e2862246f RxJava常用方法及含义: 一、创建操作符 create() 创建被观察者just() 创建一个被观察者,并发送事件,发送的事件不可以超过10个以上。fromArray() 和just一样,不过一次可以传入一个数组fromCallable...

hbsizw的专栏 300

Unreal5从入门到精通之一文搞懂Unreal的C++代码编译之谜

我们在开发Unreal项目时,如果时蓝图模板的项目,一般问题不大,因为当你修改完蓝图,点击编译Compile+保存Save,就可以继续开发了。这对于开发者来说也非常友好。但是,如果你使用的C++模板开发项目,代码编译一切都变得魔幻起来,IDE(VS/Rider)里面有编译,编辑器里面也有编译,有什么区别呢?我们来列举几个新手常碰到的问题。1.代码我明明新建了,编辑器里怎么看不到?2.昨天我新家的功能运行的好好的,今天怎么感觉还是老逻辑。或者昨天加的新代码,新蓝图不见了。

TxNet 1606

Android从零开始学习Rxjava2(三)—— Buffer

rxjava2变换运算符 rxjava一样提供了很多变换运算符帮助我们更简单的转转发出的Observable。这些变换运算符也是我们相对来说比较常用到的,所以对于每个变换运算符我们都单独拿出来简单记录下。 Buffer 定期将Observable发出的项目收集到束中并发出这些束,而不是一次发送一个项目。 上面这句话可能难以直接理解,其实buffer顾名思义就是缓冲,rxjava提供buffer可以...

DYJALY的专栏 840

Electron - Electron failed to install correctly, please delete node_modules/electron and try install

Electron安装失败:Electron failed to install correctly, please delete node_modules/electron and try installing again,electron安装报错:Electron failed to install correctly...解决方案,Electron 未能正确安装,请删除 node_modules/electron,然后再次尝试安装,如何解决这个问题,手把手教你解决,在yarn dev时报错,electr

🏆 前端领域优质创作者 4368

6.6kW的车载充电器(On-Board Charger, OBC)电路分析

图片展示了6.6kW的车载充电器(On-Board Charger, OBC)电路,其中包含双向和单向两种拓扑结构。接下来我们将深入分析每个模块的设计、原理及其优势,以帮助理解不同结构在实际应用中的选型和应用。

weixin_43199439的博客 5672

Carson带你学Android:RxJava创建操作符

前言 Rxjava,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。 如果还不了解 RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 RxJava如此受欢迎的原因,在于其提供了丰富 & 功能强大的操作符,几乎能完成所有的功能需求 今天,我将为大家详细介绍RxJava操作符中最常用的创建操作符,并附带 Ret

Carson带你学Android 1万+

老版QQ原生表情gif动态

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

rxjava操作符

创建操作 Create、Defer、Empty/Never/Throw、From、Interval、Just、Range、Repeat、Start、Timer 变换操作 Buffer、FlatMap、GroupBy、Map、Scan、Window 过滤操作 Debounce、Distinct、ElementAt、Filter、First、IgnoreElements、Last、Sample、Ski...

weixin_42274773的博客 164

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android中的RxJava入门及常用操作符

RxJava在GitHub的介绍// 翻译:RxJava 是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库也就是说:RxJava是一个基于事件流,实现异步操作的库。

ChenYiRan123456的博客 1346

精雕软件(JDpaint) 5.5 绿色版

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

手写Rxjava了解核心实现原理

RxJava将观察者模式运用到了极致,使得通过一些简单的操作符就可以实现诸如线程切换、过滤、转换等复杂的业务流程,并通过链式调用保持了代码的可读性和简洁性链式调用是通过在每一个操作符中都返回一个新的被观察者Observable实现每一个操作符的基本实现逻辑,都是先创建新的中间被观察者,利用这个中间被观察者从上游的被观察者获取数据,经过加工处理后,再传递给下游的观察者线程的切换本质上还是通过线程池和Handler实现其他常见操作符:map 转换事件,返回普通事件。

guangdeshishe的博客 1087

Rxjava从入门到精通:创建操作符之:just(),From(),create()操作符

Rxjava从入门到精通:创建操作符之:just(),From(),create() ,fromIterable() 操作符

C++ JAVA的专栏 3379

RxJava【创建】操作符 create just from defer timer interval MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com RxJava【创建】操作符 create just from defer timer interval MD demo地址 参...

weixin_33696822的博客 179

RxJava2.0 使用心得(2)

RxJava2.0使用心得 Observable的其他创建方式:

TEN_Mammon 431

初识RxJava(一)创建类 操作符

前言: 众所周知RxJava是个好东西,至于好在哪里大家相信大家都看过了百度出来的第一篇文章就是 抛物线的这篇文章 《给 Android 开发者的 RxJava 详解》,这篇文章很好,但是像我一样的读得懵懵懂懂得人应该也是大有人在吧,而且是关于RxJava 1.0版本的,现在已经是Rxjava 2.0 时代了,好多东西已经发生了变化,那么我推荐各位看这位...

weixin_34293246的博客 167

Rxjava(变换类)-Buffer

定期收集Observable的数据放进一个数据包裹,然后发射这些数据包裹,而不是一次发射一 个值。 Buffer 操作符将一个Observable变换为另一个,原来的Observable正常发射数据,变换产生 的Observable发射这些数据的缓存集合。 Buffer 操作符在很多语言特定的实现中有很多种变 体,它们在如何缓存这个问题上存在区别。 注意:如果原来的Observa

new_abc的专栏 843

Android RxJava使用介绍(三) RxJava的操作符

上一篇文章已经详细讲解了RxJava的创建型操作符,本片文章将继续讲解RxJava操作符,包括: Transforming Observables(Observable的转换操作符) Filtering Observables(Observable的过滤操作符)

呼啸而过的专栏 2万+

Android-RxJava操作符-buffer

buffer : 缓存 1 buffer(count) buffer( ) — 它定期从Observable收集数据到一个集合,然后把这些数据集合打包发射,而不是一次发射一个 。 buffer(count) : 以列表(List)的形式发射非重叠的缓存,每一个缓存至多包含来自原始Observable的count项数据(最后发射的列表数据可能少于count项) Observab...

zuochunsheng的博客 901

RxJava3 转换型操作符

通过具体的示例,学习每个操作符的用法~

bigfc的博客 750

RxJava 转换操作符 buffer

buffer操作符的功能: 1:能一次性集齐多个结果到列表中,订阅后自动清空相应结果,直到完全清除 2: 也可以周期性的集齐多个结果到列表中,订阅后自动清空相应结果,直到完全清除 例子1: 一次订阅2个 //一次订阅2个 Observable.range(1,5).buffer(2).subscribe(new Observer>() {

小炫风技术旅行 5546

2024年度技术全景报告:Kubernetes社区治理与架构深度解析

作为容器编排领域的标杆项目,Kubernetes在2024年展现了从技术实现到社区治理的全面成熟。本文从技术观察者视角,深度解析Kubernetes社区如何通过结构化治理模型支撑大规模开源协作,以及其在可扩展性、数据保护、AI集成等关键领域的技术演进脉络。 ## 年度里程碑回顾:从治理框架到技术突破 [![Kubernetes社区治理层级图](https://raw.gitcode.com/G

gitblog_01169的博客 634

RxJava使用和原理(一)

RxJava基本使用和介绍

linwq8的博客 1524
上一篇: RxJava3案例 -- FlatMap+Map+OnErrorResumeNext操作符联合应用场景
下一篇: RxJava3案例 - FromIterable+Filter+Buffer实现列表数据过滤
大脸猫6_6
博客等级 码龄5年 53粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值