Android RxJava 按其参数排序对象,该参数是另一个对象的列表
Posted
技术标签:
【中文标题】Android RxJava 按其参数排序对象,该参数是另一个对象的列表【英文标题】:Android RxJava sort object by its parameter which is list of another object 【发布时间】:2021-09-13 07:47:46 【问题描述】:我有一个对象
data class Question(
var publishDate: DateTime?,
var tags: List<QuestionTags>
etc.
现在它按发布日期排序
val sortedQuestions = questions.sortedBy it.publishDate
但我想按其标签chapterId
之一对其进行排序。 QuestionTags 看起来像这样
data class QuestionTags(
val id: Long,
val chapterId: Long?
etc.
我试图做一些 RxJava 魔法
sortedQuestions =
questions.flatMap it.tags
.filter it.chapterId != null
.map sortedQuestions[0]
.sortedBy it.blablabla
但无论如何它都不起作用。
如何.map
它或.flatMap
它来实现它?
我试图将其平面映射到 QuestionTags,而不是将其映射到 Question
sortedQuestions =
questions.flatMap it.tags
.filter it.chapterId != null
.map Question()
但在.map Question()
中,它强制我将值传递给所有构造函数参数,这是我不想做的。
【问题讨论】:
既然你有一个List<QuestionTags>
,如果一个问题的标签带有chapterId
1 和3,而另一个带有2 的标签会发生什么:稍后应该对哪个问题进行排序?如果一个有 1、2、3 和另一个 1,2 怎么办?
它应该按列表中的第一个chapterId排序。如果两者都有相同的chapterId,它们应该按publishDate 排序,就像已经完成一样。
【参考方案1】:
它应该按列表中的第一个 chapterId 排序。如果两者都有相同的chapterId,它们应该按publishDate排序,就像它已经完成一样
那么你根本不需要flatMap
(或RxJava):
questions.sortedBy Pair(it.tags.firstOrNull(), it.publishDate)
【讨论】:
以上是关于Android RxJava 按其参数排序对象,该参数是另一个对象的列表的主要内容,如果未能解决你的问题,请参考以下文章
Android:rxjava简单实现原理(create操作符)