我知道我参加聚会很晚了,但我想要一种方法来按多个键、asc 或 desc 分别为每个字段排序。我想出了这个似乎可行的方法:
public static sortObjectArray(def objects, Map sortFields){
objects.sort{a,b->
int matches = 0
for(def entry in sortFields){
if(entry.value == 'asc'){
matches = (a[entry.key] <=> b[entry.key]).toInteger()
}else{
matches = (b[entry.key] <=> a[entry.key]).toInteger()
}
if(matches != 0){
break
}
}
return matches
}
}
它允许传递对象列表和映射,对象列表将根据映射的键排序,根据映射条目的值降序或升序。例如:
ArrayList<Map> objects = [
[field1:1,field2:2,field3:2],
[field1:1,field2:1,field3:1],
[field1:1,field2:2,field3:1],
]
println sortObjectArray(objects,[field1:'asc',field2: 'desc',field3: 'asc'])
输出:
[[field1:1, field2:2, field3:1], [field1:1, field2:2, field3:2], [field1:1, field2:1, field3:1]]