2017-09-25 95 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

啊,這很簡單,但直到我看到它才點擊。謝謝! –

相關問題