RxJava2,如何合并多个可观察结果?

时间:2018-07-13 08:00:54

标签: android kotlin rx-java retrofit rx-java2

我正在开发Android应用程序。 我对RxJava2有疑问。 这是一个示例:

我有一个用户ID列表。 (1,2,3,4,5,...)

val userIds = listOf(1, 2, 3, 4, 5)

我想列出用户数据。 要获取用户数据,我应该调用“ REST API”。 (改造) 在这种情况下,我应该要求多个。

获取/ users / 1

获取/ users / 2

GET / users / 3

获取/ users / 4

GET / users / 5

...

fun getUsers(userIds: List<String>, callback: UsersLoadedCallback) {
    var userList = List<User>()

    val userObservables = mutableListOf<Observable<User>>()
    userIds.forEach {
        userObservables.add(UserService.getUser(it))
    }

    Observable.merge(userObservables)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                userList.add(it)
            }
}

我知道这是错误的。 但是我不知道该如何解决。 “ join”,“ merge”,“ zip”? 我该怎么办?

1 个答案:

答案 0 :(得分:5)

使用fromIterableconcatMap

Observable.fromIterable(userIds)
    .concatMap(userId -> 
        UserService.getUser(userId).subscribeOn(Schedulers.io())
    )
    .toList()
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(users -> callback.onUsersLoaded(users), error -> { /* report */ });