Ответ 1
Вот решение Groovy. Тем не менее, по существу, реализация Компаратора.
list.sort { map1, map2 -> map1.rowNum <=> map2.rowNum ?: map1.position <=> map2.position }
На этом стоит. В Grails кажется, что нельзя определить сортировку по умолчанию для нескольких столбцов при сопоставлении доменов a 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}
Очевидно, что в последнем случае отсутствует лодка, сортировка Groovy. Я видел публикации повторно: реализация сопоставима, но, если возможно, поиск чего-то более кратким.
Вот решение Groovy. Тем не менее, по существу, реализация Компаратора.
list.sort { map1, map2 -> map1.rowNum <=> map2.rowNum ?: map1.position <=> map2.position }
Благодаря ссылке GreenGiant мы видим, что проблема закрыта как фиксированная, начиная с версии 2.3.
Существует также пример кода:
static mapping =
{ sort([lastname:'asc', name:'asc']) }
Он работает для меня в 2.4.3
Вы можете использовать String.format, если знаете максимальную длину. Я предположил max 10 lenght:
list.sort { String.format('%010d%010d', it.rowNum, it.position) }