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);