альтернативная сортировка по умолчанию в GRAILS - PullRequest
0 голосов
/ 31 июля 2009

почему следующий фрагмент Groovy возвращает чередующийся

[Счет: 2222 и 2222, Счет: 1111 и 1111] или

[Счет: 1111 и 1111, Счет: 2222 и 2222]

если вы запускаете его несколько раз в Groovy Console? Я думал, что оператор сортировки приводит к ВСЕГДА убыванию порядка сортировки списка ???

class Account {
    long number
    String code
    String toString() {return "Account: $number and $code"}
    static mapping = {
        sort number:"desc"
    }
}
List items = []
items << new Account(number:1111,code:'1111')
items << new Account(number:2222,code:'2222')
println items.sort()

Спасибо заранее Dominik

Ответы [ 2 ]

1 голос
/ 31 июля 2009

Вы не определяете порядок среди своих учетных записей экземпляров. Директива mapping применима только к отображенным классам GORM (IOW: «доменные объекты») и будет использоваться только при загрузке экземпляров вашего класса из базы данных AFAIK.

Однако вы добавляете объекты в простой Список , который не знает о свойствах GORM. Для надежной сортировки списков экземпляров Account в таком контексте вам необходимо указать явный порядок, например:

class Account implements Comparable {

   ...
   def int compareTo(rhs) {
       long onum = rhs.number;
       return (onum > number)? -1 : ((onum < number)? 1 : 0);
   }
   ...
}

Эта статья содержит больше информации по теме. Относительно того, почему Groovy сортирует список по-разному при нескольких вызовах на list.sort : ну, я понятия не имею ...

0 голосов
/ 01 ноября 2011

Grails имеет два основных способа сортировки по умолчанию:

  1. Сортировка при запросе:

    def airports = Airport.list(sort:'name')
    
  2. Поместите метод сортировки по умолчанию для этого объекта:

    class Airport {
     …
     static mapping = {
      sort name:"desc"
     }
    }
    

Вышеизложенное взято из документации grails .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...