You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:45:01