【问题标题】:RxJava subscribe on combination of flowables depending on each otherRxJava 订阅相互依赖的 flowables 组合
【发布时间】:2020-09-05 03:21:32
【问题描述】:

嘿,我是 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 返回什么,因此也不确定要压缩什么。

【问题讨论】:

  • 在第二个 flatMap 中使用 zip。用用户列表压缩 groupId。
  • 感谢您的回答!我根据我的考虑更新了我的问题,你能看看吗?

标签: java rx-java2 flatmap flowable


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2017-04-04
    • 2016-08-06
    相关资源
    最近更新 更多