0

嘿,我是 RxJava 的新手,并尝试实现以下目标:我有以下方法:

Flowable<List<Group>> getGroups();

Flowable<List<User>> getMembersForGroup(String groupid);

现在实际上我想得到一个看起来像这样的结果:

组 g1 -> 列出成员 1

组 g2-> 列出成员 2 ....

口语:了解每个组的成员。

我尝试过类似的东西

getGroups().flatMap( //map getMembers(gid) for each gid  ) 

但我被困在“每个gid”这一点上,因为我不确切知道我真正想从flatMaps Func1返回什么以及如何在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 返回什么,因此也不确定要压缩什么。

4

1 回答 1

1

这是您可以使用的一种方法(还有其他方法,包括这种方法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);
于 2020-05-25T13:55:29.213 回答