RxJava 订阅相互依赖的可流动对象组合
RxJava subscribe on combination of flowables depending on each other
嘿,我是 RxJava 的新手,想尝试实现以下目标:
我有以下方法:
Flowable<List<Group>> getGroups();
Flowable<List<User>> getMembersForGroup(String groupid);
现在实际上我想要得到如下结果:
组 g1 -> 列出成员 1
组g2->列出成员2
....
口语:认识每个组的组员。
我试过类似
getGroups().flatMap( //map getMembers(gid) for each gid )
但我卡在了 "for each gid" 点,因为我不知道我到底想从 flatMaps Func1 return 得到什么,以及如何在 flatMaps Func2 中处理它。
有人可以帮忙吗?
不幸的是,我仍然不知道,我对 rxjava 的想法不太了解。这是我到目前为止得到的:
model.getGroupData()
.flatMap(new Func1<QueryDocumentSnapshot,Flowable<Maybe<List<UserSchema>>>>() {
@Override
public Flowable<Maybe<List<UserSchema>>> call(QueryDocumentSnapshot doc) {
Groups groups = doc.toObject(Groups.class);
List<Maybe<List<UserSchema>>> memberflow = new ArrayList<>();
for (GroupSchema g: groups){
memberflow.add(model.getMembersOfGroup(g.getId()));
}
return Flowable.fromIterable(memberflow);
}
},
new Func2<QueryDocumentSnapshot, Flowable<Maybe<List<UserSchema>>>,Flowable>() {
@Override
public Flowable call(QueryDocumentSnapshot queryDocumentSnapshot, Flowable<Maybe<List<UserSchema>>> flowable) {
//zip?
}
});
如您所见,我实际上有一个 QueryDocumentSnapshot,这并不重要,因为它可以很容易地转换为上述列表。
所以我仍然不确定我应该从 Func1 return 中获取什么,因此也不确定要压缩什么。
这是您可以使用的一种方法(还有其他方法,包括 zip
一种):
groupApi
.getGroups()
.flatMap(Flowable::fromIterable)
.map(Group::getId)
.distinct()
.flatMap(groupId -> groupApi.getMembersForGroup(groupId).map(users -> new Pair(groupId, users)))
.subscribe(System.out::println);
嘿,我是 RxJava 的新手,想尝试实现以下目标: 我有以下方法:
Flowable<List<Group>> getGroups();
Flowable<List<User>> getMembersForGroup(String groupid);
现在实际上我想要得到如下结果:
组 g1 -> 列出成员 1
组g2->列出成员2 ....
口语:认识每个组的组员。
我试过类似
getGroups().flatMap( //map getMembers(gid) for each gid )
但我卡在了 "for each gid" 点,因为我不知道我到底想从 flatMaps Func1 return 得到什么,以及如何在 flatMaps Func2 中处理它。
有人可以帮忙吗?
不幸的是,我仍然不知道,我对 rxjava 的想法不太了解。这是我到目前为止得到的:
model.getGroupData()
.flatMap(new Func1<QueryDocumentSnapshot,Flowable<Maybe<List<UserSchema>>>>() {
@Override
public Flowable<Maybe<List<UserSchema>>> call(QueryDocumentSnapshot doc) {
Groups groups = doc.toObject(Groups.class);
List<Maybe<List<UserSchema>>> memberflow = new ArrayList<>();
for (GroupSchema g: groups){
memberflow.add(model.getMembersOfGroup(g.getId()));
}
return Flowable.fromIterable(memberflow);
}
},
new Func2<QueryDocumentSnapshot, Flowable<Maybe<List<UserSchema>>>,Flowable>() {
@Override
public Flowable call(QueryDocumentSnapshot queryDocumentSnapshot, Flowable<Maybe<List<UserSchema>>> flowable) {
//zip?
}
});
如您所见,我实际上有一个 QueryDocumentSnapshot,这并不重要,因为它可以很容易地转换为上述列表。
所以我仍然不确定我应该从 Func1 return 中获取什么,因此也不确定要压缩什么。
这是您可以使用的一种方法(还有其他方法,包括 zip
一种):
groupApi
.getGroups()
.flatMap(Flowable::fromIterable)
.map(Group::getId)
.distinct()
.flatMap(groupId -> groupApi.getMembersForGroup(groupId).map(users -> new Pair(groupId, users)))
.subscribe(System.out::println);