Kotlin实现ArrayList<User>按指定角色分组的自定义排序问题
解决方案
你需要先给指定顺序的角色分配优先级权重,再在原有排序逻辑前新增一层角色权重的比较即可,实现代码如下:
fun getListWithGroupingAndSorting(): ArrayList<User> { // 定义角色优先级映射:数值越小排序越靠前 val rolePriority = mapOf( "Mechanic" to 1, "Plumber" to 2, "Electrician" to 3 ) val users = ArrayList<User>() // 此处为从服务端拉取用户列表并赋值给users的逻辑 return ArrayList( users.sortedWith( // 第一优先级:按角色权重升序,实现固定顺序分组 compareBy<User> { user -> rolePriority[user.role] ?: Int.MAX_VALUE // 不在预设列表里的角色默认排最后 } // 第二优先级:同角色内按未读消息数降序 .thenByDescending { it.unreadMessageCount } // 第三优先级:未读数相同时按姓名字母升序 .thenBy { it.firstName } ) ) }
逻辑说明
- 角色分组实现:通过预设的
rolePriority映射给每个角色分配固定权重,排序时优先按权重升序排列,保证所有Mechanic排在最前,之后是Plumber,最后是Electrician。如果你的角色是枚举类,可将映射的键替换为枚举常量,避免字符串拼写错误。 - 组内排序逻辑:和需求完全匹配,未读消息数更高的用户排在同组前列,未读数相同(包括全为0)时自动按姓名字母升序排列。
内容的提问来源于stack exchange,提问作者Rakesh L
相关产品推荐
相关产品推荐

