Skip to content

Instantly share code, notes, and snippets.

@oluies
Created February 24, 2011 20:57
Show Gist options
  • Save oluies/842870 to your computer and use it in GitHub Desktop.
Save oluies/842870 to your computer and use it in GitHub Desktop.
-< Jason Zaugg
case class Person(last: String, first: String)
val ps = List(Person("Smith", "Bob"), Person("Smith", "Bill"))
val psS = ps.sortBy(p => (p.last, p.first))
implicit val o = Ordering.by((p: Person) => (p.last, p.first))
ps.sorted
case class Reverse[T](t: T)
implicit def ReverseOrdering[T: Ordering]: Ordering[Reverse[T]] = Ordering[T].reverse.on(_.t)
ps.sortBy(p => (p.last, Reverse(p.first)))
/**
* An answer from Jason Zaugg on the scala-language mailing list
*
* items.orderBy( item => item.foo ).thenBy ( item => item.bar )
*/
@oluies
Copy link
Author

oluies commented Feb 24, 2011

scala> case class Person(last: String, first: String)
defined class Person

scala> val ps = List(Person("Smith", "Bob"), Person("Smith", "Bill"))
ps: List[Person] = List(Person(Smith,Bob), Person(Smith,Bill))

scala> val psS = ps.sortBy(p => (p.last, p.first))
psS: List[Person] = List(Person(Smith,Bill), Person(Smith,Bob))

scala> implicit val o = Ordering.by((p: Person) => (p.last, p.first))
o: scala.math.Ordering[Person] = scala.math.Ordering$$anon$4@6750cf54

scala> ps.sorted
res0: List[Person] = List(Person(Smith,Bill), Person(Smith,Bob))

@oluies
Copy link
Author

oluies commented Feb 24, 2011

scala> case class Reverse[T](t: T)
defined class Reverse

scala> implicit def ReverseOrdering[T: Ordering]: Ordering[Reverse[T]]
= Ordering[T].reverse.on(_.t)
ReverseOrdering: [T](implicit evidence$1: Ordering[T])Ordering[Reverse[T]]

scala> ps.sortBy(p => (p.last, Reverse(p.first)))
res21: List[Person] = List(Person(Smith,Bob), Person(Smith,Bill))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment