Mungkin ada cara yang jelas untuk mengubah tanda, jika Anda mengurutkan berdasarkan beberapa nilai numerik
list.sortBy(- _.size)
Secara lebih umum, pengurutan dapat dilakukan dengan metode yang diurutkan dengan Pengurutan implisit, yang dapat Anda buat secara eksplisit, dan Pengurutan memiliki kebalikan (bukan daftar terbalik di bawah). Anda dapat melakukannya
list.sorted(theOrdering.reverse)
Jika pengurutan yang ingin Anda balikkan adalah pengurutan implisit, Anda bisa mendapatkannya dengan [Pengurutan [A]] secara implisit (A tipe tempat Anda memesan) atau Pengurutan [A] yang lebih baik. Itu akan menjadi
list.sorted(Ordering[TheType].reverse)
sortBy seperti menggunakan Ordering.by, jadi Anda bisa melakukannya
list.sorted(Ordering.by(_.size).reverse)
Mungkin bukan yang terpendek untuk menulis (dibandingkan dengan minus) tetapi tujuannya jelas
Memperbarui
Baris terakhir tidak berfungsi. Untuk menerima _
in Ordering.by(_.size)
, kompilator perlu mengetahui tipe mana yang kita pesan, sehingga ia dapat mengetik _
. Tampaknya itu akan menjadi jenis elemen daftar, tetapi tidak demikian, karena tanda tangan diurutkan
def sorted[B >: A](ordering: Ordering[B])
. Pengurutan mungkin aktif A
, tetapi juga pada leluhur mana pun A
(Anda mungkin menggunakan byHashCode : Ordering[Any] = Ordering.by(_.hashCode)
). Dan memang, fakta bahwa daftar adalah kovarian memaksa tanda tangan ini. Bisa dilakukan
list.sorted(Ordering.by((_: TheType).size).reverse)
tapi ini jauh lebih tidak menyenangkan.