如何进行分组、排序和排序:Kotlin 集合
How to make a grouping, ordering and sorting: Kotlin collection
我正在尝试根据 Kotlin 风格对每个组进行分组、排序和排序,尽可能简洁易读。
我有一个数据class。
enum class LoadingStatus { PROCESSING, SCANNING, FAIL, FINISHED }
data class FileModel(val loadingStatus: LoadingStatus, val fileName: String, val modifiedDate: Long)
我想对 FileModel
的集合进行排序:
项目应按以下顺序从上到下排序:
PROCESSING → SCANNING → FINISHED → OTHER
子排序顺序:
PROCESSING
→ 按修改时间 (AS)
SCANNING
→ 按修改时间 (DE)
FINISHED
→ 按修改时间 (DE)
OTHER
→ 按名称 (AS)
private fun setupFilesOrder(incomeList: MutableList<FileModel>): MutableList<FileModel>
= ...
这个怎么样?
fun setupFilesOrder(incomeList: MutableList<FileModel>): MutableList<FileModel> {
val grouped = incomeList.groupBy { it.loadingStatus }
return listOf(
grouped[LoadingStatus.PROCESSING]?.sortedBy { it.modifiedDate }.orEmpty(),
grouped[LoadingStatus.SCANNING]?.sortedByDescending { it.modifiedDate }.orEmpty(),
grouped[LoadingStatus.FINISHED]?.sortedByDescending { it.modifiedDate }.orEmpty(),
grouped[LoadingStatus.FAIL]?.sortedBy { it.fileName }.orEmpty()
).flatten().toMutableList()
}
如果你想要更多表达,甚至可以这样:)
fun setupFilesOrder(incomeList: MutableList<FileModel>): MutableList<FileModel> {
val grouped = incomeList.groupBy { it.loadingStatus }
infix fun LoadingStatus.sort(block: List<FileModel>.() -> List<FileModel>) =
grouped[this]?.block().orEmpty()
return listOf(
LoadingStatus.PROCESSING sort { sortedBy { it.modifiedDate } },
LoadingStatus.SCANNING sort { sortedByDescending { it.modifiedDate } },
LoadingStatus.FINISHED sort { sortedByDescending { it.modifiedDate } },
LoadingStatus.FAIL sort { sortedBy { it.fileName } }
).flatten().toMutableList()
}
我正在尝试根据 Kotlin 风格对每个组进行分组、排序和排序,尽可能简洁易读。
我有一个数据class。
enum class LoadingStatus { PROCESSING, SCANNING, FAIL, FINISHED }
data class FileModel(val loadingStatus: LoadingStatus, val fileName: String, val modifiedDate: Long)
我想对 FileModel
的集合进行排序:
项目应按以下顺序从上到下排序:
PROCESSING → SCANNING → FINISHED → OTHER
子排序顺序:
PROCESSING
→ 按修改时间 (AS)
SCANNING
→ 按修改时间 (DE)
FINISHED
→ 按修改时间 (DE)
OTHER
→ 按名称 (AS)
private fun setupFilesOrder(incomeList: MutableList<FileModel>): MutableList<FileModel>
= ...
这个怎么样?
fun setupFilesOrder(incomeList: MutableList<FileModel>): MutableList<FileModel> {
val grouped = incomeList.groupBy { it.loadingStatus }
return listOf(
grouped[LoadingStatus.PROCESSING]?.sortedBy { it.modifiedDate }.orEmpty(),
grouped[LoadingStatus.SCANNING]?.sortedByDescending { it.modifiedDate }.orEmpty(),
grouped[LoadingStatus.FINISHED]?.sortedByDescending { it.modifiedDate }.orEmpty(),
grouped[LoadingStatus.FAIL]?.sortedBy { it.fileName }.orEmpty()
).flatten().toMutableList()
}
如果你想要更多表达,甚至可以这样:)
fun setupFilesOrder(incomeList: MutableList<FileModel>): MutableList<FileModel> {
val grouped = incomeList.groupBy { it.loadingStatus }
infix fun LoadingStatus.sort(block: List<FileModel>.() -> List<FileModel>) =
grouped[this]?.block().orEmpty()
return listOf(
LoadingStatus.PROCESSING sort { sortedBy { it.modifiedDate } },
LoadingStatus.SCANNING sort { sortedByDescending { it.modifiedDate } },
LoadingStatus.FINISHED sort { sortedByDescending { it.modifiedDate } },
LoadingStatus.FAIL sort { sortedBy { it.fileName } }
).flatten().toMutableList()
}