我试图弄清楚如何在另一个中使用一个可观察到的结果。
我有一个返回Observable<List<User>>
的服务呼叫,此后又有另一个服务呼叫,我想在上一个可观察到的列表中使用每个用户(user.getId()
)的ID来创建ID列表List<Int>
。然后,此int列表将传递给第二个服务调用。我该如何实现?
我希望这个问题有意义。让我知道是否需要澄清自己。
答案 0 :(得分:1)
我认为您想要flatMap
。 flatMap
是一个运算符,您可以在其中基于Observable的项目发出另一个Observable。
val obs: Observable<List<User>>
obs.flatMap { users: List<User> ->
serviceWhichEmitsObservable.doMagic(users)
}
如果您要单独使用用户,则可以使用fromIterable转换Observable>-> Obsersvable。查看此答案:RxJava - fetch every item on the list
val obs: Observable<List<User>>
obs
.flatMap { users: List<User> -> Observable.fromIterable(users)
.flatMap { user: User -> serviceWhichEmitsObservable.doMagic(user) }
重新阅读您的问题之后,我认为您想要的是:List<User>
-> List<Integer>
并将此列表传递给服务。您必须先映射列表。与RX无关。尽管如此:
val obs: Observable<List<User>>
obs
.map { users: List<User> -> users.map { it.id } }
.flatMap { userIds: List<Integer> -> serviceWhichEmitsObservable.doMagic(userIds) }