Scala stable multi-key sort with nulls last
Scala
import scala.util.Sorting
case class Row(name: String, age: Integer)
def compareRows(a: Row, b: Row): Int =
val ageOrder = (Option(a.age), Option(b.age)) match
case (None, None) => 0
case (None, _) => 1
case (_, None) => -1
case (Some(x), Some(y)) => x.compareTo(y)
if ageOrder != 0 then ageOrder else a.name.compareToIgnoreCase(b.name)
def sortRows(rows: Seq[Row]): Seq[Row] =
val array = rows.toArray
Sorting.stableSort(array)(using Ordering.fromLessThan((a, b) => compareRows(a, b) < 0))
array.toSeq