Trait/Object

scala.math

Ordering

Related Docs: object Ordering | package math

Permalink

trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable

Ordering is a trait whose instances each represent a strategy for sorting instances of a type.

Ordering's companion object defines many implicit objects to deal with subtypes of AnyVal (e.g. Int, Double), String, and others.

To sort instances by one or more member variables, you can take advantage of these built-in orderings using Ordering.by and Ordering.on:

import scala.util.Sorting
val pairs = Array(("a", 5, 2), ("c", 3, 1), ("b", 1, 3))

// sort by 2nd element
Sorting.quickSort(pairs)(Ordering.by[(String, Int, Int), Int](_._2))

// sort by the 3rd element, then 1st
Sorting.quickSort(pairs)(Ordering[(Int, String)].on(x => (x._3, x._1)))

An Ordering[T] is implemented by specifying compare(a:T, b:T), which decides how to order two instances a and b. Instances of Ordering[T] can be used by things like scala.util.Sorting to sort collections like Array[T].

For example:

import scala.util.Sorting

case class Person(name:String, age:Int)
val people = Array(Person("bob", 30), Person("ann", 32), Person("carl", 19))

// sort by age
object AgeOrdering extends Ordering[Person] {
  def compare(a:Person, b:Person) = a.age compare b.age
}
Sorting.quickSort(people)(AgeOrdering)

This trait and scala.math.Ordered both provide this same functionality, but in different ways. A type T can be given a single way to order itself by extending Ordered. Using Ordering, this same type may be sorted in many other ways. Ordered and Ordering both provide implicits allowing them to be used interchangeably.

You can import scala.math.Ordering.Implicits to gain access to other implicit orderings.

Self Type
Ordering[T]
Annotations
@implicitNotFound( msg = ... )
Version

0.9.5, 2008-04-15

Since

2.7

See also

scala.math.Ordered, scala.util.Sorting

Linear Supertypes
PartialOrdering[T], Equiv[T], Serializable, java.io.Serializable, Comparator[T], AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Ordering
  2. PartialOrdering
  3. Equiv
  4. Serializable
  5. Serializable
  6. Comparator
  7. AnyRef
  8. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. class Ops extends AnyRef

    Permalink

    This inner class defines comparison operators available for T.

Abstract Value Members

  1. abstract def compare(x: T, y: T): Int

    Permalink

    Returns an integer whose sign communicates how x compares to y.

    Returns an integer whose sign communicates how x compares to y.

    The result sign has the following meaning:

    • negative if x < y
    • positive if x > y
    • zero otherwise (if x == y)
    Definition Classes
    Ordering → Comparator

Concrete Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  8. def equiv(x: T, y: T): Boolean

    Permalink

    Return true if x == y in the ordering.

    Return true if x == y in the ordering.

    Definition Classes
    OrderingPartialOrderingEquiv
  9. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  10. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  11. def gt(x: T, y: T): Boolean

    Permalink

    Return true if x > y in the ordering.

    Return true if x > y in the ordering.

    Definition Classes
    OrderingPartialOrdering
  12. def gteq(x: T, y: T): Boolean

    Permalink

    Return true if x >= y in the ordering.

    Return true if x >= y in the ordering.

    Definition Classes
    OrderingPartialOrdering
  13. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  14. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  15. def lt(x: T, y: T): Boolean

    Permalink

    Return true if x < y in the ordering.

    Return true if x < y in the ordering.

    Definition Classes
    OrderingPartialOrdering
  16. def lteq(x: T, y: T): Boolean

    Permalink

    Return true if x <= y in the ordering.

    Return true if x <= y in the ordering.

    Definition Classes
    OrderingPartialOrdering
  17. def max(x: T, y: T): T

    Permalink

    Return x if x >= y, otherwise y.

  18. def min(x: T, y: T): T

    Permalink

    Return x if x <= y, otherwise y.

  19. implicit def mkOrderingOps(lhs: T): Ops

    Permalink

    This implicit method augments T with the comparison operators defined in scala.math.Ordering.Ops.

  20. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  21. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  22. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  23. def on[U](f: (U) ⇒ T): Ordering[U]

    Permalink

    Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:

    Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:

    def compare(x:U, y:U) = Ordering[T].compare(f(x), f(y))
  24. def reverse: Ordering[T]

    Permalink

    Return the opposite ordering of this one.

    Return the opposite ordering of this one.

    Definition Classes
    OrderingPartialOrdering
  25. def reversed(): Comparator[T]

    Permalink
    Definition Classes
    Comparator
  26. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  27. def thenComparing[U <: Comparable[_ >: U]](arg0: java.util.function.Function[_ >: T, _ <: U]): Comparator[T]

    Permalink
    Definition Classes
    Comparator
  28. def thenComparing[U](arg0: java.util.function.Function[_ >: T, _ <: U], arg1: Comparator[_ >: U]): Comparator[T]

    Permalink
    Definition Classes
    Comparator
  29. def thenComparing(arg0: Comparator[_ >: T]): Comparator[T]

    Permalink
    Definition Classes
    Comparator
  30. def thenComparingDouble(arg0: ToDoubleFunction[_ >: T]): Comparator[T]

    Permalink
    Definition Classes
    Comparator
  31. def thenComparingInt(arg0: ToIntFunction[_ >: T]): Comparator[T]

    Permalink
    Definition Classes
    Comparator
  32. def thenComparingLong(arg0: ToLongFunction[_ >: T]): Comparator[T]

    Permalink
    Definition Classes
    Comparator
  33. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  34. def tryCompare(x: T, y: T): Some[Int]

    Permalink

    Returns whether a comparison between x and y is defined, and if so the result of compare(x, y).

    Returns whether a comparison between x and y is defined, and if so the result of compare(x, y).

    Definition Classes
    OrderingPartialOrdering
  35. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  36. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  37. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from PartialOrdering[T]

Inherited from Equiv[T]

Inherited from Serializable

Inherited from java.io.Serializable

Inherited from Comparator[T]

Inherited from AnyRef

Inherited from Any

Ungrouped