Grails 基于两个标准的Groovy列表排序

Grails 基于两个标准的Groovy列表排序,grails,groovy,Grails,Groovy,我有一个对象列表,这些对象都是相同类型的,有两个属性“uniqueId”和“secondaryId”。我想先按“uniqueId”对列表进行排序,然后按每个uniqueId的“secondaryId”对列表进行排序,以便此列表: 唯一ID/第二ID 5/3 2/6 5/8 2/5 一旦排序,将如下所示: 2/5 2/6 5/3 5/8 我似乎不能完全正确地理解语法: return searchResults.sort{[it.uniqueId, it.secondaryId]} 这是我开始尝试

我有一个对象列表,这些对象都是相同类型的,有两个属性“uniqueId”和“secondaryId”。我想先按“uniqueId”对列表进行排序,然后按每个uniqueId的“secondaryId”对列表进行排序,以便此列表:

唯一ID/第二ID 5/3 2/6 5/8 2/5

一旦排序,将如下所示: 2/5 2/6 5/3 5/8

我似乎不能完全正确地理解语法:

return searchResults.sort{[it.uniqueId, it.secondaryId]}
这是我开始尝试的,但没有成功。

您可以使用:

map=[[u:5,s:3],
[u:2,s:6],
[u:5,s:8],
[u:2,s:5]]
排序={m->
m、 排序{e1,e2->
e1.u e2.u?:e1.s e2.s
} 
}
断言排序(映射)=[[u:2,s:5],
[u:2,s:6],
[u:5,s:3],
[u:5,s:8]]
您可以用于:

map=[[u:5,s:3],
[u:2,s:6],
[u:5,s:8],
[u:2,s:5]]
排序={m->
m、 排序{e1,e2->
e1.u e2.u?:e1.s e2.s
} 
}
断言排序(映射)=[[u:2,s:5],
[u:2,s:6],
[u:5,s:3],
[u:5,s:8]]
哪个导致了哪个导致了
map = [[u:5, s:3],
 [u:2, s:6],
 [u:5, s:8],
 [u:2, s:5]]

sort = { m ->
  m.sort { e1, e2 -> 
    e1.u <=> e2.u ?: e1.s <=> e2.s 
  } 
}

assert sort(map) == [[u:2, s:5], 
 [u:2, s:6], 
 [u:5, s:3], 
 [u:5, s:8]]