List 按在其他列表中初始化的自定义顺序排列对象列表

List 按在其他列表中初始化的自定义顺序排列对象列表,list,groovy,List,Groovy,我有一个对象列表,其类型为Person: class Person{ int id String name String bestColor } def persons = [ new Person(1,'Abdennour','white'), new Person(2,'Ali','red'), new Person(3,'Hsen','white'), new Per

我有一个对象列表,其类型为
Person

class Person{
    int id
    String name
    String bestColor
}


def persons = [ new Person(1,'Abdennour','white'),
                new Person(2,'Ali','red'),
                new Person(3,'Hsen','white'),
                new Person(4,'Aicha','green') ]
我有一个颜色列表:

def colors=['green','white','red']
我想根据第三个字段(
bestColor
)订购
人员
列表。但是,我不想要颜色的字母顺序,而是想要与
颜色
列表相同的顺序。 也就是说,预期结果是:

def persons=[new Person(4,'Aicha','green')
,new Person(1,'Abdennour','white')
,new Person(3,'Hsen','white')
,new Person(2,'Ali','red')]
因此:

@groovy.transform.Canonical
class Person{
    int id
    String name
    String bestColor
}

def persons = [ new Person( 1, 'Abdennour', 'white' ),
                new Person( 2, 'Ali', 'red' ),
                new Person( 3, 'Hsen', 'white' ),
                new Person( 4, 'Aicha', 'green' ) ]

def colors = [ 'green','white','red' ]
您只需执行以下操作:

// Sort (mutating the persons list)
persons.sort { colors.indexOf( it.bestColor ) }

// check it's as expected
assert persons.id == [ 4, 1, 3, 2 ]