Поскольку поведение Doubles, определенное спецификацией IEEE, не согласуется с полным порядком при работе с NaN, для Double определены два порядка: TotalOrdering, который согласуется с полным порядком, и IeeeOrdering, который согласуется насколько это возможно со спецификацией IEEE и операциями с плавающей точкой, определенными в scala.math.
Этот порядок может быть предпочтительным в числовых контекстах.
Создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае — результат функции сравнения other.
Параметры
other
порядок, который используется, если этот порядок возвращает ноль
Пример
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
.orElse(Ordering.by[Pair, Int](_.b))
Принимая функцию f, преобразующую T в S, создаёт Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она не равна нулю, в противном случае результат, эквивалентный:
Ordering[S].compare(f(x), f(y))
Эта функция эквивалентна передаче результата Ordering.by(f) в orElse.
Пример
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
.orElseBy[Int](_.b)
Реализации, переопределяющие этот метод, ДОЛЖНЫ переопределять isReverseOf также, если они изменяют поведение (например, кэширование не требует переопределения).