我有以下物件:
class Registration(
domain: _root_.scala.Predef.String = "",
registeredAt: Option[com.google.protobuf.timestamp.Timestamp] = None
)
我需要按registeredAt desc對專案進行排序。
我試過:
registrations.sortBy(_.registeredAt)(ord.reverse)
implicit def ord: Ordering[Option[Timestamp]] = Ordering.by(_.seconds)
但是,我在 _.seconds 上收到錯誤,因為registeredAt 是選項。
我也試過:
implicit val timeStampOrdering = new Ordering[Option[Timestamp]] {
override def compare(x: Option[Timestamp], y: Option[Timestamp]): Int = x.map(_.seconds) compareTo y.map(_.seconds)
}
但是在這里我在 compareTo 上有一個錯誤
我該如何解決?
uj5u.com熱心網友回復:
最簡單的方法可能是seconds在sortBy呼叫中提取 ,而無需使用新的Ordering. 否定要反向排序的數字:
registrations.sortBy(_.registeredAt.fold(0)(0 - _.seconds))
(或registeredAt.map(_.seconds).getOrElse(0))
uj5u.com熱心網友回復:
您可以僅使用隱式Ordering[Timestamp].
有一個隱式轉換,Ordering可以將 anyOrdering[T]轉換為Ordering[Option[T]]:
implicit def ord: Ordering[Timestamp] =
Ordering.by(_. seconds)
implicitly[Ordering[Option[Timestamp]]] //we have this ordering
uj5u.com熱心網友回復:
您正在嘗試創建一個Ordering[Timestamp],當您需要的是
implicit def ord: Ordering[Option[Timestamp]] = Ordering.by(_.map(_.seconds))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365974.html
