Kotlin中如何自定义ItemCategory排序规则让OTHER排在末尾
解决方案
你可以通过自定义双层排序键实现需求,第一层优先将OTHER分类后置,第二层保持原有的分类名称字母序排序,修改后的代码如下:
items = itemList.sortedWith( compareBy( { if (it.category == ItemCategory.OTHER) 1 else 0 }, { it.category.name } ) ).groupBy { it.category }
逻辑说明
- 第一层排序规则:所有非
OTHER的分类排序权重为0,OTHER分类权重为1,权重更低的分类会排在前面,天然实现OTHER全局后置 - 第二层排序规则:同一权重分组内的分类,仍然按照分类名称的字母序排列,和你原有逻辑保持一致
可选优化方案
如果后续可能调整分类排序顺序,建议直接在枚举类中定义排序优先级属性,维护更灵活:
- 调整枚举类定义,新增排序优先级字段
enum class ItemCategory(val sortOrder: Int) { ACCOUNT(0), CARD(1), INVESTMENTS(2), LOAN(3), PAYMENT(4), OTHER(Int.MAX_VALUE); // 直接设为最大值保证永远在最后 }
- 直接按优先级字段排序即可
items = itemList.sortedBy { it.category.sortOrder }.groupBy { it.category }
内容的提问来源于stack exchange,提问作者Wafi_ck
相关产品推荐
相关产品推荐

