sorted
Will sort the list using the natural ordering (based on the implicit Ordering passed)
sortBy (an attribute)
Sort by a given attribute using the attribute's type.
e.g. given a list of Person objects, if you want to sort them in ascending order of their age (which is an Int), you could simply say: personList.sortBy(_.age)
sortWith (a function)
Takes a comparator function. Useful when you want to specify a custom sorting logic.
e.g. if you want to sort by age descending, you could write this as:
personList.sortWith{(leftE,rightE) =>
leftE.age > rightE.age
}
Or, more simply: personList.sortWith(_.age > _.age)
Checkout this gist for a full example:
https://gist.github.com/gsluthra/80555ed4af24bea244b5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Sequence of numbers | |
val xs = Seq(1, 5, 3, 4, 6, 2) | |
// Sort using Natural ordering as defined for Integers in Scala Library | |
xs.sorted //1,2,3,4,5,6 | |
// Sort 'with' a comparator function | |
xs.sortWith(_<_) //1,2,3,4,5,6 | |
xs.sortWith(_>_) //6,5,4,3,2,1 | |
xs.sortWith((left,right) => left > right) //6,5,4,3,2,1 | |
// Create a Person class | |
case class Person(val name:String, val age:Int) | |
// Define a list of Persons | |
val ps = Seq(Person("John", 32), Person("Bruce", 24), Person("Cindy", 33), Person("Sandra", 18)) | |
// Sort People by increasing Age (natural ordering of Int will kick in) | |
ps.sortBy(_.age) //List(Person(Sandra,18), Person(Bruce,24), Person(John,32), Person(Cindy,33)) | |
// Sort People by decreasing Age, using a comparator function | |
ps.sortWith(_.age > _.age) //List(Person(Cindy,33), Person(John,32), Person(Bruce,24), Person(Sandra,18)) |