RxAndroid Observable 填充子列表
RxAndroid Observable Populate Sub Lists
所以我意识到标题有点模糊,但我遇到的问题很复杂(至少对我而言)。
我有一个从 API 加载列表的 Observable。用户响应类似于:
{
"status": "Successful",
"count": 2,
"response": [{
"_id": "abc",
"email": "email@email.com",
"surname": "Surname",
"firstname": "Firstname",
"posts": [
"123",
"456",
"789"]
}]
,...
}
然后 post 的回复:
{
"status": "Successful",
"count": 7,
"response": [{
"_id": "123",
"name": "Post 1"
}, {
"_id": "456",
"name": "Post 2"
}, {
"_id": "789",
"name": "post 3"
}]
}
我已经有一个 returns 和 Observable<Post>
正确映射响应的方法。
现在我遇到的问题是:我可以获取用户列表,其中包含 posts
id 的列表,但我想用我可以查询的实际 objects 填充该列表我的方法(Observable<Post> getPost(String id))
我尝试了各种方法,但没有任何效果。
到目前为止,我有以下方法将响应映射到 List<User>
- 我想为列表中的每个用户获取与 Posts
中的 ID 关联的 Posts
=18=]:
public Observable<List<User>> getUsers() {
return apiService.getUsers()
.flatMap(userResponse -> Observable.from(userResponse.users).toList())
.flatMap(user -> Observable.from(users))
.toList();
}
上面发出一个List<User>
,这就是我需要的。我保留 运行 的问题是它发出每个 Post 项目,最终只是 returns 3 个用户项目,都是一样的(第一个用户)。那么我如何执行一些转换以获得列表中每个项目的 posts,并将其应用于模型中表示实际 post?
的另一个列表
谢谢,很抱歉让您感到困惑 - 我是 RxJava 的新手,所以我花了一些时间来理解它。
编辑:
已解决 - 检查下面的答案
好的,终于解决了。对于那些感兴趣的人,这里是解决方案:
我有一种方法可以获取用户的帖子列表:
public Observable<List<Posts>> getPostsForUser(User user) {
return Observable
.from(user.posts)
.flatMap(this::getPost)
.toList();
}
然后在获取用户列表时使用如下:
public Observable<List<User>> getPopulatedUser() {
return apiService.getUsers()
.flatMap(userResponse -> Observable.from(userResponse.users).toList())
.flatMap(Observable::from)
.flatMap(user -> getPostsForUser(user)
.map(posts -> {
user.setPosts(posts);
return (User) user;
})
).toList();
}
所以我意识到标题有点模糊,但我遇到的问题很复杂(至少对我而言)。
我有一个从 API 加载列表的 Observable。用户响应类似于:
{
"status": "Successful",
"count": 2,
"response": [{
"_id": "abc",
"email": "email@email.com",
"surname": "Surname",
"firstname": "Firstname",
"posts": [
"123",
"456",
"789"]
}]
,...
}
然后 post 的回复:
{
"status": "Successful",
"count": 7,
"response": [{
"_id": "123",
"name": "Post 1"
}, {
"_id": "456",
"name": "Post 2"
}, {
"_id": "789",
"name": "post 3"
}]
}
我已经有一个 returns 和 Observable<Post>
正确映射响应的方法。
现在我遇到的问题是:我可以获取用户列表,其中包含 posts
id 的列表,但我想用我可以查询的实际 objects 填充该列表我的方法(Observable<Post> getPost(String id))
我尝试了各种方法,但没有任何效果。
到目前为止,我有以下方法将响应映射到 List<User>
- 我想为列表中的每个用户获取与 Posts
中的 ID 关联的 Posts
=18=]:
public Observable<List<User>> getUsers() {
return apiService.getUsers()
.flatMap(userResponse -> Observable.from(userResponse.users).toList())
.flatMap(user -> Observable.from(users))
.toList();
}
上面发出一个List<User>
,这就是我需要的。我保留 运行 的问题是它发出每个 Post 项目,最终只是 returns 3 个用户项目,都是一样的(第一个用户)。那么我如何执行一些转换以获得列表中每个项目的 posts,并将其应用于模型中表示实际 post?
谢谢,很抱歉让您感到困惑 - 我是 RxJava 的新手,所以我花了一些时间来理解它。
编辑: 已解决 - 检查下面的答案
好的,终于解决了。对于那些感兴趣的人,这里是解决方案: 我有一种方法可以获取用户的帖子列表:
public Observable<List<Posts>> getPostsForUser(User user) {
return Observable
.from(user.posts)
.flatMap(this::getPost)
.toList();
}
然后在获取用户列表时使用如下:
public Observable<List<User>> getPopulatedUser() {
return apiService.getUsers()
.flatMap(userResponse -> Observable.from(userResponse.users).toList())
.flatMap(Observable::from)
.flatMap(user -> getPostsForUser(user)
.map(posts -> {
user.setPosts(posts);
return (User) user;
})
).toList();
}