Поскольку поведение Float в соответствии со спецификацией IEEE не соответствует полному порядку при работе с NaN, для Float определены два порядка: TotalOrdering, который соответствует полному порядку, и IeeeOrdering, который максимально соответствует спецификации IEEE и операциям с плавающей точкой, определённым в scala.math.
Этот порядок может быть предпочтительнее в числовых контекстах.
Создает Ordering[T], функция сравнения которого возвращает результат функции сравнения этого Ordering, если она отлична от нуля, в противном случае результат функции сравнения other.
Параметры значения
other
Ordering для использования, если этот Ordering возвращает ноль
Пример
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, если они изменяют поведение (например, кэширование не требует переопределения).