根据字符串 属性 对对象数组列表进行排序

Sorting arraylist of objects based on String property

我是 groovy 语法的新手。

我有这样的数据结构。

[
        {"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"},
    ]

我正在尝试根据 name 属性 对其进行排序。我需要所有带有 name=max 的记录应该首先出现,然后是 name=Sam,然后是 name=John 以及具有空 name 字段或任何其他值的剩余记录。

有人可以建议我如何实现吗?

谢谢。

类似

def weights = [ "Max", "Sam", "John", '', ]

def sorted = [
        ["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"],
    ].sort{ weights.indexOf it.name.trim() }

println sorted.join( '\n' )

打印

[name:Max, gender:Male, id:2]
[name:Max, gender:Male, id:5]
[name:Sam, gender:Male, id:4]
[name:Sam, gender:Male, id:6]
[name:Sam, gender:Male, id:7]
[name:John, gender:Male, id:1]
[name:John, gender:Male, id:3]
[name:John, gender:Male, id:9]
[name: , gender:Male, id:8]
[name: , gender:Male, id:10]