Как отсортировать список в Scala по определенным значениям

Я использую Squeryl и у меня есть список (query.toList) классов. У классов есть свойство ("статус"), по которому я хочу отсортировать, но я хочу отсортировать по порядку, который я решил, который не является алфавитным или числовым. Например, если был список из 3 классов:

(<Foo1>, <Foo2>, <Foo3>)

И Foo1.status был приостановлен, Foo2 был одобрен, а Foo3 отклонен, после сортировки он стал:

(<Foo2>, <Foo3>, <Foo1>)

Я хочу, чтобы сначала был утвержден всегда, приостановлен всегда последним, отклонен после утвержденного и т. Д. Просто произвольный порядок. Я не уверен, как это сделать красиво. Я могу сделать несколько запросов и вручную построить его, как получить все одобренные, затем получить все отклоненные и добавить в этот список, получить все приостановленные добавления и так далее, но это кажется очень тяжелым

1 ответ

Решение

Вы должны использовать sortBy, Затем вы можете реализовать Ordering[Status]или просто конвертируйте свои статусы в какой-то другой тип (например, int), который сортирует естественным образом. Например:

list.sortBy { f =>
  f.status match {
    case Approved => 0
    case Rejected => 1
    case Suspended => 2
  }
}
Другие вопросы по тегам