难倒在这一个上。在Grails中,似乎无法在域映射中的多个列上定义默认排序la static mapping = {sort'prop1 desc,prop2 asc'}或{sort([prop1:'desc',prop2:'asc']) }。只有第一列被排序,跛脚。
类似地,当尝试Groovy在多个列上对Grails findAllBy查询进行排序时,第二种排序会覆盖第一列。
def list = [[rowNum:2,position:3],[rowNum:1,position:2],[rowNum:3,position:1]]
list.sort {it.rowNum}的.sort {it.position}
显然在后一种情况下错过了船,这种常规。我已经看过帖子了:实现可比性,但如果可能的话,寻找更简洁的东西。
答案 0 :(得分:31)
这是一个Groovy解决方案。仍然基本上实现了比较器。
list.sort { map1, map2 -> map1.rowNum <=> map2.rowNum ?: map1.position <=> map2.position }
答案 1 :(得分:7)
感谢GreenGiant的链接,我们发现该问题已在2.3版本中修复。
还有示例代码:
static mapping =
{ sort([lastname:'asc', name:'asc']) }
它在2.4.3中为我工作
答案 2 :(得分:0)
如果知道最大长度,可以使用String.format。我假设最多10个长度:
list.sort { String.format('%010d%010d', it.rowNum, it.position) }