Es kann naheliegend sein, das Vorzeichen zu ändern, wenn Sie nach einem numerischen Wert sortieren
list.sortBy(- _.size)
Im Allgemeinen kann die Sortierung nach einer Methode erfolgen, die mit einer impliziten Reihenfolge sortiert ist, die Sie explizit festlegen können, und die Reihenfolge hat eine umgekehrte Reihenfolge (nicht die umgekehrte Liste unten)
list.sorted(theOrdering.reverse)
Wenn die Reihenfolge, die Sie umkehren möchten, die implizite Reihenfolge ist, können Sie sie implizit [Bestellung [A]] (A der Typ, für den Sie bestellen) oder besser Bestellung [A] erhalten. Das wäre
list.sorted(Ordering[TheType].reverse)
sortBy ist wie die Verwendung von Ordering.by, also können Sie es tun
list.sorted(Ordering.by(_.size).reverse)
Vielleicht nicht das kürzeste zu schreiben (im Vergleich zu Minus), aber die Absicht ist klar
Aktualisieren
Die letzte Zeile funktioniert nicht. Um das _
In zu akzeptieren Ordering.by(_.size)
, muss der Compiler wissen, für welchen Typ wir bestellen, damit er das eingeben kann _
. Es mag scheinen, dass dies der Typ des Elements der Liste ist, aber dies ist nicht so, wie die Signatur von sortiert ist
def sorted[B >: A](ordering: Ordering[B])
. Die Reihenfolge kann aktiviert sein A
, aber auch für jeden Vorfahren von A
(den Sie möglicherweise verwenden byHashCode : Ordering[Any] = Ordering.by(_.hashCode)
). Und tatsächlich erzwingt die Tatsache, dass die Liste kovariant ist, diese Signatur. Man kann es tun
list.sorted(Ordering.by((_: TheType).size).reverse)
aber das ist viel weniger angenehm.