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

时间:2017-09-25 21:46:44

标签: scala sorting squeryl

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

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

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

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

我希望首先获得批准,暂停最后,批准后拒绝等。只需任意订购。我不确定如何做得很好。我可以做多个查询并手动构建它就像获得所有批准,然后全部被拒绝并附加到该列表,获得所有被挂起的附加,等等但这似乎超重

1 个答案:

答案 0 :(得分:4)

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

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