我正在开发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”? 我该怎么办?
答案 0 :(得分:5)
使用fromIterable
和concatMap
:
Observable.fromIterable(userIds)
.concatMap(userId ->
UserService.getUser(userId).subscribeOn(Schedulers.io())
)
.toList()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(users -> callback.onUsersLoaded(users), error -> { /* report */ });