如果依赖于先前的Observable,如何链接Observable?

时间:2018-07-27 17:59:14

标签: java kotlin rx-java2

我正在制作一个基本的聊天应用程序。我有3个基础课。 User类存储用户名。 Message类存储发送者的userId和内容。 Chat类包含Message的列表。这些类还包含其他数据,但与该问题无关。

我可以按用户ID检索用户。 UserSingle<User>的形式返回。

要在我的UI中显示一条消息,我需要做两件事:发件人的姓名和消息的内容。我将它们放入帮助程序类(SimplifiedMessage)中。我需要获取SimplifiedMessage的列表。

我已经有了Chat对象。

基本上,我需要获取所有消息的列表,然后为每条消息获取发送者的名称,然后将名称和内容放入SimplifiedMessage中。最后,我必须将所有SimplifiedMessage收集到一个列表中。另外,必须按顺序进行。如果聊天记录中包含消息[M1,M2,M3],则SimplifiedMessage的列表也应以相同的顺序排列。我该如何实现?

1 个答案:

答案 0 :(得分:0)

参考RxJava Continuations,由Akarnokd建议进行解释。我的用例类似于从属延续部分中的第二个片段。此代码段将完成工作:

Flowable.fromIterable(chat.messages)
    .concatMap { message ->
        repository.getUserById(message.senderId)
            .concatMap { user ->
                Flowable.just(SimpifiedMessage(user.name, message.content))
            }
    }
    .toList()

对于不熟悉concatMap的用户来说,这是一个FlatMap,不允许交织排放。这样我们就可以满足订购条件。