RxJava使用filter时如何知道是否所有的item都被过滤了?

本文介绍在使用RxJava的filter操作符时,如何检测所有元素是否都被过滤掉的情况。通过在filter操作符后添加doOnNext和doOnTerminate操作符,可以实现在没有元素通过过滤时进行特定处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候会使用rxJava的filter操作符来过滤重复的数据,用起来非常的方便,返回true的元素会通过,返回false的元素则会被丢弃.但是存在这样一种情况,如果所有的元素都被过滤掉了,丢弃了,后续subscribe的onNext()也不会被调用.这个时候我们要如何得知呢?大多数情况下都不需要关心,但是在有的情况下我们又需要知道,是不是所有的元素都被过滤了.

filter操作符本身并没有提供这样的功能,只能通过其他的方式了:

 		   var hasElement = false
            map = map.filter {
               return 过滤结果
            }.doOnNext {
                hasElement = true
            }.doOnTerminate {
                if (!hasElement) {
                   	//全被过滤了
                    onResult.invoke(0)
                }
            }

这样在onTerminate的时候我们查看是否有元素被发射,就知道有没有被全部过滤掉了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值