Kotlin开发中列表分类项按字母顺序排序失效该如何解决?
Kotlin分类列表排序失效解决方案
问题原因
sortedBy为不可变集合操作,返回排序后的新列表,不会修改原有列表。你在also代码块中调用sortedBy但未接收返回值,排序结果直接被丢弃,没有生效。- 排序逻辑位置错误:你需要对
groupBy生成的全部分类(Map的Key)做全局排序,而非在每个单分类内部对仅含1个Header元素的列表做无意义排序。同时原代码未拼接分类下的条目,不符合你预期的展示结构。
修正后代码
items = dataList.groupBy { it.category } // 对分组后的分类按展示名称的字母顺序排序 .toSortedMap(compareBy { category -> "res.Strings.customName${category.name}" ?: category.name }) // 拼接每个分类的Header + 下属条目,扁平化生成最终列表 .flatMap { (category, categoryData) -> val headerTitle = "res.Strings.customName${category.name}" ?: category.name buildList { // 添加分类头 add(Header(headerTitle)) // 添加当前分类下的所有条目,如需条目也排序可在flatMap后加sortedBy规则 addAll(categoryData.flatMap { it.list }) } }
补充说明
如果需要对每个分类下的子条目也做排序,可在addAll的参数中追加排序规则,示例:addAll(categoryData.flatMap { it.list }.sortedBy { it.itemTitle })
内容的提问来源于stack exchange,提问作者Wafi_ck
相关产品推荐
相关产品推荐

