Shapelessあなたのためにこれを解決します。
import shapeless._
import shapeless.syntax.std.product._
case class Fnord(a: Int, b: String)
List(Fnord(1, "z - last"), Fnord(1, "a - first")).sortBy(_.productElements.tupled)
res0: List[Fnord] = List(Fnord(1,a - first), Fnord(1,z - last))
productElementsを取得しますが型崩れHListにケースクラスを回す:
scala> Fnord(1, "z - last").productElements
res1: Int :: String :: shapeless.HNil = 1 :: z - last :: HNil
そしてHListsは#tupledでタプルに変換されます。
scala> Fnord(1, "z - last").productElements.tupled
res2: (Int, String) = (1,z - last)
パフォーマンスホーリーになる可能性が高いあなたが絶えず変換しているからです。おそらく、すべてを変換したフォームに変換し、並べ替えてから、(Fnord.apply _).tupled
のようなものを使って元に戻してください。
REPL 2.9.0-1のヒントのおかげで、私は()を "取り除く"ことができました – Tanjona
非常に涼しい!私は適用されないことについて全く知らなかった –
クール、それは働いた!あなたの提案で私は私のケースクラスを得ることができました。次のようにしてオーダーしました: 'val thisTuple:Ordered [(String、Int)] = Foo.unapply(this).get; val thatTuple = Foo.unapply(それ).get; thisTupleはthatTuple'を比較します。 これは世界で最も美しいものではありませんので、私はまだ提案はしていますが、あなたの答えは確かに仕事を完了させます。ありがとう! – Douglas