Подтвердить что ты не робот

Отображение карт Grails для нескольких полей:: Groovy сортировка по нескольким адресам карты

На этом стоит. В 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. Я видел публикации повторно: реализация сопоставима, но, если возможно, поиск чего-то более кратким.

4b9b3361

Ответ 1

Вот решение Groovy. Тем не менее, по существу, реализация Компаратора.

list.sort { map1, map2 -> map1.rowNum <=> map2.rowNum ?: map1.position <=> map2.position }

Ответ 2

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

Существует также пример кода:

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

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

Ответ 3

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

list.sort { String.format('%010d%010d', it.rowNum, it.position) }