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 = ... )
- Source
- Ordering.scala
- Since
2.7
- See also
- Alphabetic
- By Inheritance
- Ordering
- PartialOrdering
- Equiv
- Serializable
- Serializable
- Comparator
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Type Members
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
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(x: T, y: T): T
Return
x
ifx
>=y
, otherwisey
. -
def
min(x: T, y: T): T
Return
x
ifx
<=y
, otherwisey
. -
implicit
def
mkOrderingOps(lhs: T): Ops
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
reverse: Ordering[T]
Return the opposite ordering of this one.
Return the opposite ordering of this one.
- Definition Classes
- Ordering → PartialOrdering
-
def
reversed(): Comparator[T]
- Definition Classes
- Comparator
-
def
thenComparing[U <: Comparable[_ >: U]](arg0: java.util.function.Function[_ >: T, _ <: U]): Comparator[T]
- Definition Classes
- Comparator
-
def
thenComparing[U](arg0: java.util.function.Function[_ >: T, _ <: U], arg1: Comparator[_ >: U]): Comparator[T]
- Definition Classes
- Comparator
-
def
thenComparing(arg0: Comparator[_ >: T]): Comparator[T]
- Definition Classes
- Comparator
-
def
thenComparingDouble(arg0: ToDoubleFunction[_ >: T]): Comparator[T]
- Definition Classes
- Comparator
-
def
thenComparingInt(arg0: ToIntFunction[_ >: T]): Comparator[T]
- Definition Classes
- Comparator
-
def
thenComparingLong(arg0: ToLongFunction[_ >: T]): 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.collection.parallel.immutable
- Immutable, parallel data-structures such asParVector
,ParRange
,ParHashMap
orParHashSet
scala.collection.parallel.mutable
- Mutable, parallel data-structures such asParArray
,ParHashMap
,ParTrieMap
orParHashSet
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.swing
- A convenient wrapper around Java's GUI framework called Swing (scala-swing.jar)scala.util.parsing
- Parser combinators (scala-parser-combinators.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
.