How to sort a list in Scala by two fields?
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.
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)
^
In general, if you use a stable sorting algorithm, you can just sort by one key, then the next.
rows.sortBy(_.firstName).sortBy(_.lastName)
The final result will be sorted by lastname, then where that is equal, by firstname.