You need to enable JavaScript to run this app. Groovy中如何按对象name属性自定义规则排序ArrayList
优惠活动
大模型
产品
解决方案
定价
更多

Groovy中如何按对象name属性自定义规则排序ArrayList

Groovy 自定义优先级列表排序实现

核心思路是为每个name值匹配对应的排序权重,权重值越小排序越靠前,逻辑直白易调整,非常适合刚接触Groovy的新手理解。

实现步骤

  1. 先定义优先级权重映射表:
    • Max 权重设为0,对应最高优先级
    • Sam 权重设为1,对应第二优先级
    • John 权重设为2,对应第三优先级
    • 所有未匹配到以上三个值的name(包括纯空格、空值、其他任意内容)统一分配权重3,排在列表最后
  2. 调用Groovy集合内置的sort方法,提取每条记录name对应的权重值作为排序依据即可。

注:Groovy的内置sort是稳定排序,同权重的记录会保留原列表中的相对顺序,不需要额外做兼容处理。

完整可运行代码

// 原始对象列表
def userList = [
    ["name": "John", "gender": "Male", "id": "1"],
    ["name": "Max", "gender": "Male", "id": "2"],
    ["name": "John", "gender": "Male", "id": "3"],
    ["name": "Sam", "gender": "Male", "id": "4"],
    ["name": "Max", "gender": "Male", "id": "5"],
    ["name": "Sam", "gender": "Male", "id": "6"],
    ["name": "Sam", "gender": "Male", "id": "7"],
    ["name": " ", "gender": "Male", "id": "8"],
    ["name": "John", "gender": "Male", "id": "9"],
    ["name": " ", "gender": "Male", "id": "10"],
]

// 排序优先级映射表
def namePriority = [
    "Max": 0,
    "Sam": 1,
    "John": 2
]
// 未匹配到映射规则的统一使用的默认权重
def defaultWeight = 3

// 执行排序
def sortedResult = userList.sort { item ->
    // 对name做空值、空格兼容处理,避免纯空格、null值导致匹配异常
    def validName = item.name?.trim() ?: ""
    namePriority.get(validName, defaultWeight)
}

排序效果验证

运行代码后得到的列表顺序完全匹配需求:

  • 最前面是所有name为Max的记录(id为2、5)
  • 接着是所有name为Sam的记录(id为4、6、7)
  • 再往后是所有name为John的记录(id为1、3、9)
  • 最后是name为纯空格的记录(id为8、10)

如果后续需要调整排序优先级,只需要修改namePriority映射表中的权重数值即可,不需要改动核心排序逻辑。


内容的提问来源于stack exchange,提问作者brig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 07:06:03