Grails映射多个字段的排序::对多个映射条目进行Groovy排序

时间:2011-02-03 05:59:41

标签: sorting grails groovy

难倒在这一个上。在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}

显然在后一种情况下错过了船,这种常规。我已经看过帖子了:实现可比性,但如果可能的话,寻找更简洁的东西。

3 个答案:

答案 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) }