list - 按其他列表中初始化的自定义顺序对对象列表进行排序

标签 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 Person(4,'Aicha','green') ]

我有一个颜色列表:

def colors=['green','white','red']

我想根据第三个字段(bestColor) 对persons 列表进行排序。但是,我不想要颜色的字母顺序,而是想要与 colors 列表相同的顺序。 这意味着,预期结果是:

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 ]

关于list - 按其他列表中初始化的自定义顺序对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20473999/

相关文章:

python - 如何将用户输入分配给变量或列表

c# - 设计 : List storing objects; access information associated with that object

python - 使用值(例如 0)初始化嵌套列表

groovy - Gradle Groovy编译在测试中找不到javafx类

Jenkins 无需 scriptler 插件即可管理 groovy 脚本

python - 如何检查子字符串是否在 Python 列表中多次出现?

python - 如何获取子目录名称列表

grails DefaultGrailsDomainClass.getIdentifier 总是返回 'id 作为标识符

grails - MarkupBuilder 从字符串渲染

xml - 如何使用 Groovy 的 MarkupBuilder 呈现列表