2017-09-25 128 views
0

我正在使用squeryl,并且我有一个列表(query.toList)。这些类有一个我想排序的属性(“状态”),但我想排序一个排序,我决定这不是按字母顺序排列或数字排列。例如,如果有3类的列表:如何按特定值对Scala中的列表进行排序

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

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

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

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

回答

4

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

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

Upvoting推荐'Ordering'。这似乎是潜在的问题。 – erip

+1

啊,这很简单,但直到我看到它才点击。谢谢! –

相关问题