使用一个作为 RxJava 中的谓词来组合两个可观察源
Composing two observable sources using one as a predicate in RxJava
我有 2 个可观察来源,其中 fetchProductList()
returns Observable<Datasource>
和其他 canInvite.execute()
取值,returns Single<Boolean>
。我需要组成流,以某种方式将第一个源的每个排放馈送到第二个源,这样我就可以 return 来自 fetchProductList()
的所有排放,并将 true
值作为列表。我试着用这种方式编写它,但它看起来有点笨拙,有什么 better/simpler 方法可以做到吗?
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 {
在我看来,这是一个更明确的解决方案:
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) }
我有 2 个可观察来源,其中 fetchProductList()
returns Observable<Datasource>
和其他 canInvite.execute()
取值,returns Single<Boolean>
。我需要组成流,以某种方式将第一个源的每个排放馈送到第二个源,这样我就可以 return 来自 fetchProductList()
的所有排放,并将 true
值作为列表。我试着用这种方式编写它,但它看起来有点笨拙,有什么 better/simpler 方法可以做到吗?
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 {
在我看来,这是一个更明确的解决方案:
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) }