我有2个可观察的源,其中fetchProductList()
返回Observable<Datasource>
,其他canInvite.execute()
取一个值并返回Single<Boolean>
。我需要对流进行组合,以将第一个源中的每个发射都馈入第二个源,以一种方式,我可以将fetchProductList()
值作为列表返回来自true
的所有发射。我试图用这种方式编写它,但是看起来有点笨拙,有没有更好/更简单的方法?
fetchProductList()
.map { dataSource -> dataSource.data }
.flatMap{ data ->
Observable.from(data.roles.map { role ->
canInvite.execute(role.key).map { canInvite ->
role to canInvite
}
})
}
.compose { it -> Single.merge(it) }
.filter { it -> it.second == true}
.map { it -> it.first }
.toList()
.subscribe {
答案 0 :(得分:2)
从我的角度来看,这是一个更清晰的解决方案:
fetchProductList()
.map { dataSource -> dataSource.data }
.flatMap { data ->
Observable.fromIterable(data.roles)
.flatMapMaybe { role ->
canInvite.execute(role.key)
.flatMapMaybe { result ->
if (result) Maybe.just(role) else Maybe.empty()
}
}
}
.toList()
.subscribe { result -> println(result) }