2

私は次のクラスを持っています:

final case class PowerDetails (
  [...],
  label: String,
  title: String,
  category: String,
  idCategory: Option[String],
  numCategory: Option[Int]
)

このようなリストをソートする必要がありますPowerDetails:

idCategory と の値を持つ要素は、 の numCategory 前に配置しNone、 と の順に 並べる必要がidCategory あり numCategoryます。値に関しては、フィールド、、Noneで並べ替える必要があります 。categorytitlelabel

できれば延長は避けたいOrdered

final case class PowerDetails (

   ...

) extends Ordered[PowerDetails] {

    override def compare(that: PowerDetails): Int = {
       // Define here the comparison
    }

}

sorted以下のように Ordering を作成してから関数を使用しようとしましたが、NullPointerException

  implicit val orderingPowers = optionOrdering.thenComparing(ordering)

  val ordering: Ordering[PowerDetails] = Ordering[(String, String, String)]
    .on[PowerDetails](powerDetail =>
      ( powerDetail.category, powerDetail.title, powerDetail.label))

  val optionOrdering : Ordering[PowerDetails] = Ordering[(Option[String], Option[Int])]
    .on[PowerDetails](powerDetail =>
      (powerDetail.idCategory, powerDetail.numCategory))

その方法を教えてください。ありがとう。

4

2 に答える 2