Może istnieć oczywisty sposób zmiany znaku, jeśli posortujesz według wartości liczbowej
list.sortBy(- _.size)
Mówiąc bardziej ogólnie, sortowanie można przeprowadzić metodą posortowaną z niejawnym porządkiem, który można jawnie określić, a kolejność ma odwrotność (nie odwrócenie listy poniżej).
list.sorted(theOrdering.reverse)
Jeśli kolejność, którą chcesz odwrócić, jest niejawną kolejnością, możesz ją uzyskać, niejawnie [Porządkowanie [A]] (A typ, na którym zamawiasz) lub lepiej Zamawianie [A]. To byłoby
list.sorted(Ordering[TheType].reverse)
sortBy przypomina korzystanie z Ordering.by, więc możesz to zrobić
list.sorted(Ordering.by(_.size).reverse)
Może nie najkrócej (w porównaniu z minusem), ale zamiar jest jasny
Aktualizacja
Ostatnia linia nie działa. Aby zaakceptować _
in Ordering.by(_.size)
, kompilator musi wiedzieć, na jaki typ zamawiamy, aby mógł wpisać _
. Może się wydawać, że to byłby typ elementu listy, ale tak nie jest, jak podpis posortowanego
def sorted[B >: A](ordering: Ordering[B])
. Porządkowanie może być włączone A
, ale także u każdego przodka A
(możesz użyć byHashCode : Ordering[Any] = Ordering.by(_.hashCode)
). I rzeczywiście, fakt, że lista jest kowariantna, wymusza ten podpis. Można to zrobić
list.sorted(Ordering.by((_: TheType).size).reverse)
ale to jest o wiele mniej przyjemne.