RxJava + Kotlin-在创建另一个观察值时使用

时间:2018-10-30 09:43:45

标签: java asynchronous kotlin reactive

我试图弄清楚如何在另一个中使用一个可观察到的结果。 我有一个返回Observable<List<User>>的服务呼叫,此后又有另一个服务呼叫,我想在上一个可观察到的列表中使用每个用户(user.getId())的ID来创建ID列表List<Int>。然后,此int列表将传递给第二个服务调用。我该如何实现?

我希望这个问题有意义。让我知道是否需要澄清自己。

1 个答案:

答案 0 :(得分:1)

我认为您想要flatMapflatMap是一个运算符,您可以在其中基于Observable的项目发出另一个Observable。

val obs: Observable<List<User>>
obs.flatMap { users: List<User> -> 
    serviceWhichEmitsObservable.doMagic(users)
}

flatMap-Operator

如果您要单独使用用户,则可以使用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) }