This question is probably quite dumb, but I can't find an example and can't figure it out.

I want to compare two Person classes by last, first, and middle name, in that order. Here's the brain-dead way to do it:

def compare(that: Person): Int = {
  val last: Int = lastName.compare(that.lastName)
  if (last != 0) last
  else {
    val first: Int = firstName.compare(that.firstName)
    if (first != 0) first
    else middleName.compare(that.middleName)
}

I know there's some much more clever way to do this (probably using Ordering) but I can't put my finger on it.

Todd

I figured out this once I realized how to access the right things in Ordering.

def compare(that: Person): Int = {
  Ordering.Tuple3(Ordering.String, Ordering.String, Ordering.String).compare(
     (lastName, firstName, middleName),
     (that.lastName, that.firstName, that.middleName))
}

I'm pretty sure I can get away with fewer explicits, but this works and is reasonably compact.

Edit
Report