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代码。
| 归档时间: |
|
| 查看次数: |
8504 次 |
| 最近记录: |