У меня есть следующий класс:
final case class PowerDetails (
[...],
label: String,
title: String,
category: String,
idCategory: Option[String],
numCategory: Option[Int]
)
Мне нужно отсортировать список PowerDetails
следующим образом:
Элементы, имеющие значение для idCategory
и numCategory
должно быть до None
, а заказано idCategory
и затем numCategory
. Что касается значений None
, их необходимо упорядочить по полям category
, title
, label
.
Если возможно, я бы хотел избежать расширения Ordered
final case class PowerDetails (
...
) extends Ordered[PowerDetails] {
override def compare(that: PowerDetails): Int = {
// Define here the comparison
}
}
Я попытался создать Порядок, как показано ниже, и затем использовать функцию sorted
, но я получение 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))
Не могли бы вы помочь мне узнать, как это сделать? Спасибо.