Puede haber una forma obvia de cambiar el signo, si ordena por algún valor numérico
list.sortBy(- _.size)
En términos más generales, la ordenación se puede realizar por un método ordenado con un ordenamiento implícito, que puede hacer explícito, y el ordenamiento tiene un reverso (no el reverso de la lista a continuación).
list.sorted(theOrdering.reverse)
Si el orden que desea revertir es el ordenamiento implícito, puede obtenerlo implícitamente [Ordenar [A]] (A del tipo que está ordenando) o mejor Ordenar [A]. Eso sería
list.sorted(Ordering[TheType].reverse)
sortBy es como usar Ordering.by, por lo que puedes hacer
list.sorted(Ordering.by(_.size).reverse)
Quizás no sea el más corto de escribir (en comparación con menos) pero la intención es clara
Actualizar
La última línea no funciona. Para aceptar el _
in Ordering.by(_.size)
, el compilador necesita saber en qué tipo estamos ordenando, para que pueda escribir el _
. Puede parecer que ese sería el tipo de elemento de la lista, pero esto no es así, como lo es la firma de ordenado
def sorted[B >: A](ordering: Ordering[B])
. El pedido puede estar activado A
, pero también en cualquier antecesor de A
(puede usar byHashCode : Ordering[Any] = Ordering.by(_.hashCode)
). Y, de hecho, el hecho de que la lista es covariante obliga a esta firma. Uno puede hacer
list.sorted(Ordering.by((_: TheType).size).reverse)
Pero esto es mucho menos agradable.