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

Posted Void

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxJava使用filter时如何知道是否所有的item都被过滤了?相关的知识,希望对你有一定的参考价值。

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

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

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

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

以上是关于RxJava使用filter时如何知道是否所有的item都被过滤了?的主要内容,如果未能解决你的问题,请参考以下文章

RXJAVA-filter

RXJAVA-filter

当 RxJava 发生不同事件时如何得到通知?

如何使用 RxJava 对来自异步源的数据进行分组

RxJava2:如何改进并行数据下载和缓存?

如何测试 rxjava 链接?