Может быть очевидный способ изменить знак, если вы отсортируете по некоторому числовому значению
list.sortBy(- _.size)
В более общем смысле сортировка может быть выполнена методом, отсортированным с неявным упорядочением, которое вы можете сделать явным, и упорядочение имеет обратную сторону (не обратный список ниже)
Вы можете сделать
list.sorted(theOrdering.reverse)
Если упорядочение, которое вы хотите изменить, является неявным упорядочением, вы можете получить его неявным образом [Порядок [A]] (A тип, по которому вы упорядочиваете) или лучше Порядок [A]. Это было бы
list.sorted(Ordering[TheType].reverse)
sortBy похож на использование Ordering.by, так что вы можете сделать
list.sorted(Ordering.by(_.size).reverse)
Может быть, не самое короткое, чтобы написать (по сравнению с минусом), но цель ясна
Обновление
Последняя строка не работает. Чтобы принять _
в Ordering.by(_.size)
, компилятору необходимо знать, какой тип мы заказываем, чтобы он мог набрать _
. Может показаться, что это будет тип элемента списка, но это не так, поскольку сигнатура sorted is
def sorted[B >: A](ordering: Ordering[B])
. Порядок может быть на A
, но также на любом предке A
(вы можете использовать byHashCode : Ordering[Any] = Ordering.by(_.hashCode)
). И действительно, тот факт, что список является ковариантным, заставляет эту подпись.
Можно сделать
list.sorted(Ordering.by((_: TheType).size).reverse)
но это гораздо менее приятно.