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

RxJava2源码分析二之just、fromArray、fromIterable      Observable.just:接收1个以上,10个以下的参数,然后逐个发射。         Observable.fromArray:接收一个数组,从数组中一个一个取出来发射。        今天从源码来看一下Observable的just方法和FromArray。        public static <T> Observable<T> jus... 阅读详情

需求:订单列表接口返回多种类型的订单,在某个页面我们只需要过滤出某种类型的订单来展示。

假设此时接口又不支持这种过滤,需要我们前端自己处理😂,那么我们可以通过Filter结合其他操作符对返回结果进行过滤。当然这里也可以不使用操作符,直接请求到列表数据后,再遍历筛选数据。那使用操作符的最大优势就是将过滤数据的操作前置(订阅前就定义好过滤逻辑了),达到的效果就是对于订阅者来说是无感知的。

Observable<List<OrderInfo>> observable = mModel.getAllOrderList()
    //1、通过flatMap对结果进行转换
    .flatMap(new Function<List<OrderInfo>, ObservableSource<List<OrderInfo>>>() {
        @Override
        public ObservableSource<List<OrderInfo>> apply(List<OrderInfo> lstSource) throws Exception {
            if (lstSource == null || lstSource.length==0) {
                return Observable.just(new ArrayList<>());
            }
            //2、判断数据不为空后,用过fromIterable依次发送每个订单对象
            return Observable.fromIterable(response.data)
                    // 3、通过filter自定义判断方法,确定哪些数据是有效的
                    .filter(new Predicate<OrderInfo>() {
                        @Override
                        public boolean test(OrderInfo orderInfo) throws Exception {
                            //4、简化判断条件(假设catalogId是"A"的,符合我们需要的条件)
                            return orderInfo.catalogId.equals("A");
                        }
                    })
                    //5、将过滤后的结果合并成列表发送
                    .buffer(response.data.size());
        }
    });
    
//订阅
observable.safeSubscribe(new SimpleSubscriber<List<OrderInfo>>() {
        @Override
        public void onNext(List<OrderInfo> resp) {
            //遍历所有结果,开始下载
        }
    });

具体步骤解释:

 1、通过flatMap对结果进行转换

通过flatMap转换后返回的还是可观察的Observable,所以转换后的结果是可以被订阅的。结合其他操作符链式调用,最终完成数据的转换。

2、判断数据不为空后,用过fromIterable依次发送每个订单对象

FromIterable可以依次发送集合中的数据,代替普通的循环并且保持数据流不中断。提前判空,减少不必要的过滤逻辑。

3、通过filter自定义判断方法,确定哪些数据是有效的

Filter操作符中接收一个Predicate对象,通过test方法返回结果决定数据是否符合要求。true:有效数据

false:无效数据

经过test测试后,将满足条件的结果发送出,不满足条件的数据舍弃掉。

4、简化判断条件(假设catalogId是"A"的,符合我们需要的条件)

这里判断条件是否成立决定filter操作符的过滤结果。

5、将过滤后的结果合并成列表发送

buffer可以通过设置缓冲数量为接口返回的数据总数,意思就是期望值是所有的数据都被整合到一起。因为缓冲数量必须大于0。所以在FromIterable之前先判一下集合是否为空。


注意:如果列表接口是分页的,明显前端过滤数据不是很合适,此时应该推动后端支持接口过滤数据。

RxJava3 操作符实战:从基础到高级的全面解析 本文全面解析RxJava3操作符,从基础创建与转换操作符(如just、map、flatMap)到高级过滤、组合及错误处理,深入探讨线程调度与背压管理。通过实战案例,帮助开发者构建高效、健壮的异步数据流处理方案,提升响应式编程技能。 阅读详情

相关推荐

探索Flux#fromIterable的魔力

通过本文,我们学习了如何使用Reactor库中的方法来将集合转换为响应式流。这不仅展示了响应式编程的强大功能,也为处理异步数据流提供了一种高效的方法。希望这个例子能够帮助你更好地理解和应用响应式编程。

m0_62153576的博客 972

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

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

bigfc的博客 685

【webFlux】Flux在fromIterable()后使用zipWithIterable将bean和其position并提供给后续链式订阅方法

步骤:创建一个包含所有bean的List,并使用fromIterable()方法将其转换为一个Flux流。使用filter()方法对Flux流中的bean进行过滤,只保留符合条件的bean。可以使用Java 8的Lambda表达式来指定过滤条件。使用zipWithIterable()方法将Flux流中的每个bean与其在List中的位置进行匹配,并将结果作为一个新的Flux流返回。最后使用subscribe()方法订阅新的Flux流,并在回调函数中获取符合条件的bean以及它们在List中的位置。

资深全栈开发工程师 1238

RxJava相关

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

hbsizw的专栏 300

android usb读写,安卓(Android)下如何开发USB NFC读写器app

对安卓工程师来说,在安卓下使用USB设备需要了解很多硬件的内容,这可能会导致工程周期的延长或者app的不稳定。为了将这种风险降到最低,友我科技发布了NFC读写器在安卓下的sdk,使用NFC读写器的类接口,安卓工程师就可以直接调用NFC读写器了,简单可靠。NFC读写器的安卓库文件为:yoworfidreader.jar在ADT工程中导入yoworfidreader.jar库文件,即可在工程中引用NF...

weixin_36433781的博客 823

Android11 关于三方应用获取su权限

SELinux,全称Security-Enhanced Linux,是一种基于Linux内核的安全机制。它通过强制访问控制(MAC)来增强Linux系统的安全性,如果不禁用SELinux,完成下面的修改可能会导致设备进入Recovery界面!adb shell getenforce 为Permissive(宽容模式),查看报错日志,发现是客户apk想使用su命令提权,但是没有权限!对于保护系统资源和防止未经授权访问非常有帮助!系统这边做修改,让su权限下放到三方应用.客户的apk运行报错。

sinat_37429535的博客 1901

RxJava合并fromIterable逐个发射的值

fromIterable 操作符逐次发射list的中的数据 import java.util.ArrayList; import java.util.List; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.android.sc

烟柳煌都 830

《YOLOv8实例分割实战:训练自己的数据集 》(视频课程)

本课程将手把手地教大家使用labelme标注和使用YOLOv8训练自己的数据集,完成一个多目标实例分割实战项目。

bai666ai的博客 790

流式处理核心原理、主流框架选型与实时应用实战

数据处理是现代软件工程与数据分析领域的核心基础。传统批处理模式在处理有限数据集时表现良好,但其‘全量加载、集中处理’的原理在面对持续涌入、规模庞大的数据流时,会遭遇内存瓶颈与高延迟挑战。流式处理作为一种先进的编程范式,其核心原理在于将数据视为连续不断的‘流’,采用‘来一点、处理一点、输出一点’的推送模式,实现了极高的内存效率和实时响应能力。这一技术价值在于能够支撑实时监控、即时反馈等对延迟敏感的业务场景。在应用层面,从简单的进程内集合转换到复杂的分布式实时计算,都需要选择合适的工具。例如,Java Stre

weixin_33834910的博客 437

物流系统集成实战:从零开始用Java对接国际快递(DHL/FedEx/UPS)

本文详细介绍了如何使用Java技术栈对接DHL、FedEx和UPS三大国际快递巨头的API,构建高效、稳定的物流集成解决方案。内容涵盖认证机制、报文标准、多语言支持等关键点,并提供实战代码示例和最佳实践,帮助开发者快速实现国际快递系统集成。

efc1234567的博客 694

快速卷积结构FIR数字滤波器的设计与ARM平台实现

本文提出了一种基于快速卷积结构的FIR数字滤波器设计与实现方案。通过Matlab设计了满足特定指标的低通FIR滤波器,采用重叠-保存法和重叠-相加法两种快速卷积算法,将计算复杂度从O(N·M)降低到O(NlogN)。详细介绍了滤波器系数生成、性能验证流程,并提供了ARM平台C语言实现的关键技术,包括定点量化处理。实验结果表明,该方法能有效滤除混合信号中的高频干扰,保留目标1kHz正弦信号,验证了设计方案的有效性。

huanghm88的专栏 123

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

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

Carson带你学Android 1万+

2025 华为OD机试真题e卷 C语言 实现【竖直四子棋】

竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。

MISAYAONE的博客 1417

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

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

ChenYiRan123456的博客 1346

语言大模型之Tokenization的深入理解

Tokenization(分词)是自然语言处理(NLP)中一个非常重要的步骤,它的目标是将文本转换为模型可以理解的格式。对于像GPT、BERT等大型预训练模型来说,tokenization决定了文本如何转化为数字表示,从而影响模型在不同任务中的表现。接下来我会深入介绍tokenization的过程、不同的tokenization方法,以及它与模型微调(fine-tuning)之间的关系。

JustinMars的博客 342

论文分栏前后内容不连续?教你word如何删除分节符

问题 当我们在写论文的时候,很多期刊的模板都是两栏的格式,但有的时候我们插入的图像尺寸可能太大,两栏格式放不下,因此需要将其以一栏的格式出入,如下: 但当我们把图片删除后,再将其转换成两栏格式,前后内容就出现不连续的情况: 正常情况下应该是如下: 正确处理方式 里面有个分页符,把分页符去掉,或者把你的文字全部复制到记事本里,然后重新复制回word就可以取消原有的格式了。 删除分节符的方法(以word 2019为例) -点击菜单栏上的“视图”,点击“大纲视图”。 可以看到word文档以整列的形式展开:

左手の明天的博客 1万+

Rxjava 2.0 fromIterable 配合 toList

Consumer&lt;List&lt;MaintenanceMap&gt;&gt; next = (List&lt;MaintenanceMap&gt; result) -&gt; { if (view != null) { view.onGetMapList(true, result, ""); } ...

做一个不断积累的人 4515

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

fromRunnable与fromCallable与fromIterable的区别

fromRunnable与fromCallable与fromIterable的区别 :示例:

qq_47746614的博客 1510

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IDEA的使用指南

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

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

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

C++ JAVA的专栏 3379

STM32F407中文手册

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

呕心沥血:RxJava2.x创建操作符

1、序言 RxJava除了拥有逻辑简洁的事件流链式调用,使用简单外其丰富的操作符基本可以满足日常开发中的各种实现逻辑 Rx的基本操作符分类 下面会逐一讲解每一类操作符的使用 2、创建操作符 2.1、基本创建操作符 create作为RxJava最基本的创建操作,用来完整的创建一个被观察者Observable对象 通过create创建一个被观察Observable对象 Observable observable = Observable.create(new ObservableOnSubscribe()

HZF 338

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

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

weixin_34293246的博客 167

RxJava2.0 使用心得(2)

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

TEN_Mammon 431

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

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

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

源代码的博客 4612

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

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

DYJALY的专栏 840

RxJava3 转换型操作符

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

bigfc的博客 750
上一篇: RxJava3案例 - FromIterable + Buffer操作符联合应用场景
下一篇: 【转载】Post请求Body类型
大脸猫6_6
博客等级 码龄5年 53粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值