ここでは、次の点でマルチソートを試みて少し厄介になります。
case class WeeklyResults(
schedule: Schedule,
result: GameResult
)
val games = // returns correctly sorted List of WeeklyResults
repo.gameresult.findAllByDate(date)
ソートされていないマップが返されるので、ゲームの日付(ゲームの日ごとにゲームの日付ヘッダーを表示するため)とID(ホーム/アウェイチームのペアをグループ化するため)にgroupByを実行すると、問題が発生します;-)
val unsorted = // Map[JodaTime, Iterable[List[WeeklyResults]]]
games.groupBy(_.schedule.gameDate).mapValues(_.groupBy(_.schedule.id).values)
さて、ListMapはソートされたマップを取得する1つの方法です。それを試してみましょう。ゲームの日付、JodaTimeをミリ秒単位でソートします。
val sorted =
ListMap(unsorted.toList.sortBy(_._1.getMillis):_*)
すべての良いゲームは、ゲームの日付ヘッダーの下で正しい順序で並べ替えられます...しかし、各ゲーム日のゲームはランダムに並べ替えられます;-(
だから、問題は、一体どうやってゲームの日付とゲームの結果IDの両方で並べ替えることができるかということです。(idはゲーム結果テーブルのPKであり、事実上DBレベルでの並べ替え順序です)
私は無益さのさまざまな組み合わせを試しました:
unsorted.flatMap{x=>
ListMap(
Seq( (x._1, x._2.map(_._2.sortBy(_.result.id))) ).sortBy(_.1.getMillis)
:_*)
}
私が何をしても、Iterable[List[WeeklyResults]]
残骸は分類されていないままです
アイデアは大歓迎です、私の知恵の終わりにあります、午前中ずっとこれに行きました