我正在制作一个基本的聊天应用程序。我有3个基础课。 User
类存储用户名。 Message
类存储发送者的userId和内容。 Chat
类包含Message
的列表。这些类还包含其他数据,但与该问题无关。
我可以按用户ID检索用户。 User
以Single<User>
的形式返回。
要在我的UI中显示一条消息,我需要做两件事:发件人的姓名和消息的内容。我将它们放入帮助程序类(SimplifiedMessage
)中。我需要获取SimplifiedMessage
的列表。
我已经有了Chat
对象。
基本上,我需要获取所有消息的列表,然后为每条消息获取发送者的名称,然后将名称和内容放入SimplifiedMessage
中。最后,我必须将所有SimplifiedMessage
收集到一个列表中。另外,必须按顺序进行。如果聊天记录中包含消息[M1,M2,M3],则SimplifiedMessage
的列表也应以相同的顺序排列。我该如何实现?
答案 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,不允许交织排放。这样我们就可以满足订购条件。