如何按特定值对 Scala 中的列表进行排序

How to sort list in Scala by specific values

我正在使用 squeryl,我有一个 类 的列表 (query.toList)。 类 有一个 属性 ("status") 我想排序,但我想排序我认为不是字母或数字的顺序。例如,如果有 3 类 的列表:

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

而Foo1.status被暂停,Foo2被批准,Foo3被拒绝,排序后变成:

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

我想要总是先批准,总是最后暂停,批准后拒绝,等等。只是任意排序。我不确定如何很好地做到这一点。我可以进行多个查询并手动构建它,例如获得所有批准,然后获得所有拒绝并追加到该列表,获得所有暂停的追加等等,但这似乎非常繁重

你应该使用 sortBy。然后,您可以实现自定义 Ordering[Status],或者将您的状态转换为自然排序的其他类型(如 int)。例如:

list.sortBy { f =>
  f.status match {
    case Approved => 0
    case Rejected => 1
    case Suspended => 2
  }
}