how to sort a list in Scala by two fields, in this example I will sort by lastName and firstName?
case class Row(var firstName: String, var lastName: String, var city: String) var rows = List(new Row("Oscar", "Wilde", "London"), new Row("Otto", "Swift", "Berlin"), new Row("Carl", "Swift", "Paris"), new Row("Hans", "Swift", "Dublin"), new Row("Hugo", "Swift", "Sligo")) rows.sortBy(_.lastName)
I try things like this
rows.sortBy(_.lastName + _.firstName)
but it doesn't work. So I be curious for a good and easy solution.
Use the sortWith() Function to Sort List in Scala. We used the sortWith() function to take a lambda expression as an argument and return the sorted result. We can use this function to sort the list in ascending and descending order.
The first two methods that are used here ("SortedSet" and "TreeSet") are used to sort immutable sets in Scala and take set as input and return the sorted set. The last method is SortedSet working over mutable sets too and take the list conversion of the set to sort.
rows.sortBy(r => (r.lastName, r.firstName))
rows.sortBy (row => row.lastName + row.firstName)
If you want to sort by the merged names, as in your question, or
rows.sortBy (row => (row.lastName, row.firstName))
if you first want to sort by lastName, then firstName; relevant for longer names (Wild, Wilder, Wilderman).
If you write
rows.sortBy(_.lastName + _.firstName)
with 2 underlines, the method expects two parameters:
<console>:14: error: wrong number of parameters; expected = 1 rows.sortBy (_.lastName + _.firstName) ^
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With