Kotlin 如何使用RxJava2将api中的数据合并到域对象中?

Kotlin 如何使用RxJava2将api中的数据合并到域对象中?,kotlin,rx-java2,Kotlin,Rx Java2,我有以下代码: interface UsersApi { fun getUsers() : Single<List<UserTO>> fun getPosts(postId: String) : Single<PostTO> } data class UserTO(val name: String, postIds: List<String>) data class PostTO(val title: String, val content

我有以下代码:

interface UsersApi {
  fun getUsers() : Single<List<UserTO>>
  fun getPosts(postId: String) : Single<PostTO>
}
data class UserTO(val name: String, postIds: List<String>)
data class PostTO(val title: String, val content: String)
data class User(val name: String, val posts: List<Post>)
data class Post(val title: String, content: String)
接口用户sapi{
fun getUsers():单个
有趣的getPosts(postId:String):单个
}
数据类UserTO(val名称:字符串,postIds:列表)
数据类PostTO(val标题:字符串,val内容:字符串)
数据类用户(val名称:字符串,val帖子:列表)
数据类Post(val标题:字符串,内容:字符串)
我正在尝试使用返回的方法编写一个存储库类

Single<List<User>>
单一
但是我不知道怎么做,因为我需要访问流中早期的对象,而且
单一的
是令人困惑的事情

我很确定我必须先调用
getUsers
,然后再调用flatmap,但随后事情就变得混乱了


有什么帮助吗?

如果您想从API加载用户并为每个用户加载他们的帖子,那么您可以执行以下操作

flattasflowable
允许您迭代api响应中的每个UserTO。使用此选项,您可以提取他们的帖子并映射到用户对象

Flowable.fromIterable
允许您迭代postIds集合并为每个post执行api调用

class MyRepository(private val api: UsersApi) {

    fun getUsers(): Single<List<User>> {
        return api.getUsers()
            .flattenAsFlowable { it }
            .flatMapSingle { loadUserPosts(it) }
            .toList()
    }

    private fun loadUserPosts(user: UserTO): Single<User> {
        return loadPosts(user.postIds)
            .map { User(name = user.name, posts = it) }
    }

    private fun loadPosts(postIds: List<String>): Single<List<Post>> {
        return Flowable.fromIterable(postIds)
            .flatMapSingle { api.getPosts(it) }
            .map { Post(title = it.title, content = it.content) }
            .toList()
    }
}
class MyRepository(私有val api:UsersApi){
fun getUsers():单个{
返回api.getUsers()
.flattasflowable{it}
.flatMapSingle{loadUserPosts(it)}
托利斯先生()
}
私人娱乐加载用户帖子(用户:UserTO):单个{
返回loadPosts(user.postIds)
.map{User(name=User.name,posts=it)}
}
私人娱乐挂件(贴子:列表):单人{
返回可流动。从可流动(postIds)
.flatMapSingle{api.getPosts(it)}
.map{Post(title=it.title,content=it.content)}
托利斯先生()
}
}