过滤RxJava中的对象列表

use*_*751 10 android reactive-programming rx-java rx-android rx-java2

我试图根据它的属性过滤列表.例如,Sensors类有一个属性isActive,我想用isActiveas 获取所有对象,true但我无法做到.我尝试了不同的方法,但我没有找到解决方案.有人可以帮我做吗?

这是我的代码:

mCompositeDisposable.add(
                fcService.getStationList()
                        .subscribeOn(Schedulers.io())
                        .flatMap( stations ->   {
                            return fcService.getSensorList(stations.get(0).getName().getOriginal());
                        })
                        .subscribe(this::handleSensors, this::handleError)
        );
Run Code Online (Sandbox Code Playgroud)

azi*_*ian 20

首先,您需要List单独发出每个项目.这可以使用flatMap()和实现Observable.fromIterable(Iterable).

然后申请filter()运营商.最后,使用将所有这些项目再次收集到列表中toList().


    service.getSensorsList()
              .flatMap(Observable::fromIterable)
              .filter(sensor -> sensor.isActive())
              .toList()
              .subscribeOn(Schedulers.io())
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(this::handleSensors, this::handleError)


Rez*_*adi 12

Kotlin用户可以使用以下更简单的方法。

fcService.getStationList()
    .map(it.filter {sensor -> sensor.isActive()})
Run Code Online (Sandbox Code Playgroud)

可能是因为Kotlin本身有这么多的列表运算符,所以对于过滤部分,您不必使用rx。it.filter {sensor -> sensor.isActive()}是纯Kotlin代码。

  • @azizbekian我知道!我只是为使用Kotlin的用户提供替代解决方案。 (3认同)
  • 这些问题要求使用 RxJava 而不是 Kotlin 的解决方案。 (2认同)