RxJava订阅依赖于可流通量的组合

问题描述 投票:0回答:1

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

Flowable<List<Group>> getGroups();

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

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

组g1->列出成员1

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

说:了解每个小组的成员。

我尝试过类似的东西

getGroups().flatMap( //map getMembers(gid) for each 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返回什么,因此不确定要压缩什么。

java rx-java2 flatmap flowable
1个回答
0
投票

这是您可以使用的一种方法(还有其他方法,包括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);
© www.soinside.com 2019 - 2024. All rights reserved.