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