Сортировка отображения Грааля по нескольким полям :: Сортировка Groovy по нескольким элементам карты - PullRequest
17 голосов
/ 03 февраля 2011

Остановился на этом. В Grails кажется, что нельзя определить сортировку по умолчанию для нескольких столбцов в доменном отображении в виде статического отображения = {sort 'prop1 desc, prop2 asc'} или {sort ([prop1: 'desc', prop2: 'asc']) }. Сортируется только первый столбец, lame.

Аналогично, при попытке 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 ]

31 голосов
/ 03 февраля 2011

Вот Groovy решение. Тем не менее, по-прежнему реализует Comparator.

list.sort { map1, map2 -> map1.rowNum <=> map2.rowNum ?: map1.position <=> map2.position }
7 голосов
/ 12 февраля 2016

Благодаря ссылке от GreenGiant, мы видим, что проблема закрыта, как исправлено в версии 2.3.

Также есть пример кода:

static mapping =
    { sort([lastname:'asc', name:'asc']) }

Это работает для меняв 2.4.3

0 голосов
/ 08 ноября 2013

Вы можете использовать String.format, если знаете максимальную длину.Я предположил, что максимум 10 длин:

list.sort { String.format('%010d%010d', it.rowNum, it.position) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...