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 = "No implicit Ordering defined for ${T}.")
- Source
- Ordering.scala
- See also
- Alphabetic
- By Inheritance
- Ordering
- PartialOrdering
- Equiv
- Serializable
- Comparator
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Type Members
- class OrderingOps extends AnyRef
This inner class defines comparison operators available for
T
.
Abstract Value Members
- abstract def compare(x: T, y: T): Int
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
- def equiv(x: T, y: T): Boolean
Return true if
x
==y
in the ordering.Return true if
x
==y
in the ordering.- Definition Classes
- Ordering → PartialOrdering → Equiv
- def gt(x: T, y: T): Boolean
Return true if
x
>y
in the ordering.Return true if
x
>y
in the ordering.- Definition Classes
- Ordering → PartialOrdering
- def gteq(x: T, y: T): Boolean
Return true if
x
>=y
in the ordering.Return true if
x
>=y
in the ordering.- Definition Classes
- Ordering → PartialOrdering
- def isReverseOf(other: Ordering[_]): Boolean
Returns whether or not the other ordering is the opposite ordering of this one.
Returns whether or not the other ordering is the opposite ordering of this one.
Equivalent to
other == this.reverse
.Implementations should only override this method if they are overriding reverse as well.
- def lt(x: T, y: T): Boolean
Return true if
x
<y
in the ordering.Return true if
x
<y
in the ordering.- Definition Classes
- Ordering → PartialOrdering
- def lteq(x: T, y: T): Boolean
Return true if
x
<=y
in the ordering.Return true if
x
<=y
in the ordering.- Definition Classes
- Ordering → PartialOrdering
- def max[U <: T](x: U, y: U): U
Return
x
ifx
>=y
, otherwisey
. - def min[U <: T](x: U, y: U): U
Return
x
ifx
<=y
, otherwisey
. - implicit def mkOrderingOps(lhs: T): OrderingOps
This implicit method augments
T
with the comparison operators defined inscala.math.Ordering.Ops
. - def on[U](f: (U) => T): Ordering[U]
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))
- def orElse(other: Ordering[T]): Ordering[T]
Creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else the result of
other
s compare function.Creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else the result of
other
s compare function.- other
an Ordering to use if this Ordering returns zero
case class Pair(a: Int, b: Int) val pairOrdering = Ordering.by[Pair, Int](_.a) .orElse(Ordering.by[Pair, Int](_.b))
Example: - def orElseBy[S](f: (T) => S)(implicit ord: Ordering[S]): Ordering[T]
Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:
Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:
Ordering[S].compare(f(x), f(y))
This function is equivalent to passing the result of
Ordering.by(f)
toorElse
.case class Pair(a: Int, b: Int) val pairOrdering = Ordering.by[Pair, Int](_.a) .orElseBy[Int](_.b)
Example: - def reverse: Ordering[T]
Return the opposite ordering of this one.
Return the opposite ordering of this one.
Implementations overriding this method MUST override isReverseOf as well if they change the behavior at all (for example, caching does not require overriding it).
- Definition Classes
- Ordering → PartialOrdering
- def reversed(): Comparator[T]
- Definition Classes
- Comparator
- def thenComparing[U <: Comparable[_ >: U <: AnyRef]](arg0: java.util.function.Function[_ >: T <: AnyRef, _ <: U]): Comparator[T]
- Definition Classes
- Comparator
- def thenComparing[U <: AnyRef](arg0: java.util.function.Function[_ >: T <: AnyRef, _ <: U], arg1: Comparator[_ >: U <: AnyRef]): Comparator[T]
- Definition Classes
- Comparator
- def thenComparing(arg0: Comparator[_ >: T <: AnyRef]): Comparator[T]
- Definition Classes
- Comparator
- def thenComparingDouble(arg0: ToDoubleFunction[_ >: T <: AnyRef]): Comparator[T]
- Definition Classes
- Comparator
- def thenComparingInt(arg0: ToIntFunction[_ >: T <: AnyRef]): Comparator[T]
- Definition Classes
- Comparator
- def thenComparingLong(arg0: ToLongFunction[_ >: T <: AnyRef]): Comparator[T]
- Definition Classes
- Comparator
- def tryCompare(x: T, y: T): Some[Int]
Returns whether a comparison between
x
andy
is defined, and if so the result ofcompare(x, y)
.Returns whether a comparison between
x
andy
is defined, and if so the result ofcompare(x, y)
.- Definition Classes
- Ordering → PartialOrdering
This is the documentation for the Scala standard library.
Package structure
The scala package contains core types like
Int
,Float
,Array
orOption
which are accessible in all Scala compilation units without explicit qualification or imports.Notable packages include:
scala.collection
and its sub-packages contain Scala's collections frameworkscala.collection.immutable
- Immutable, sequential data-structures such asVector
,List
,Range
,HashMap
orHashSet
scala.collection.mutable
- Mutable, sequential data-structures such asArrayBuffer
,StringBuilder
,HashMap
orHashSet
scala.collection.concurrent
- Mutable, concurrent data-structures such asTrieMap
scala.concurrent
- Primitives for concurrent programming such asFutures
andPromises
scala.io
- Input and output operationsscala.math
- Basic math functions and additional numeric types likeBigInt
andBigDecimal
scala.sys
- Interaction with other processes and the operating systemscala.util.matching
- Regular expressionsOther packages exist. See the complete list on the right.
Additional parts of the standard library are shipped as separate libraries. These include:
scala.reflect
- Scala's reflection API (scala-reflect.jar)scala.xml
- XML parsing, manipulation, and serialization (scala-xml.jar)scala.collection.parallel
- Parallel collections (scala-parallel-collections.jar)scala.util.parsing
- Parser combinators (scala-parser-combinators.jar)scala.swing
- A convenient wrapper around Java's GUI framework called Swing (scala-swing.jar)Automatic imports
Identifiers in the scala package and the
scala.Predef
object are always in scope by default.Some of these identifiers are type aliases provided as shortcuts to commonly used classes. For example,
List
is an alias forscala.collection.immutable.List
.Other aliases refer to classes provided by the underlying platform. For example, on the JVM,
String
is an alias forjava.lang.String
.