Commande d'objets compagnons

traitCommandement[T] étend Comparateur[T] avec PartialOrdering[T] avec Serializable

Ordering est un trait dont les instances représentent chacune une stratégie de tri des instances d'un type.

L'objet compagnon de Ordering définit de nombreux objets implicites pour traiter les sous-types de AnyVal (par exemple Int, Double), String, et autres.

Pour trier les instances par une ou plusieurs variables membres, vous pouvez tirer parti de ces ordonnancements intégrés en utilisant Ordering.by et 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)))

Un ordre[T] est implémenté en spécifiant compare(a:T, b:T), qui décide comment ordonner deux instances a et b. Les instances de Ordering[T] peuvent être utilisées par des choses comme scala.util.Sorting pour trier des collections comme Array[T].

Par exemple :

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)

Ce trait et scala.math.Ordered fournissent tous deux cette même fonctionnalité, mais de manière différente. On peut donner à un type T une seule façon de s'ordonner en étendant Ordered. En utilisant Ordering, ce même type peut être trié de nombreuses autres façons. Ordered et Ordering fournissent tous deux des implicites leur permettant d'être utilisés de manière interchangeable.

Vous pouvez importer scala.math.Ordering.Implicits pour avoir accès à d'autres ordonnancements implicites.

Type de soi
Ordonnancement[T]
Annotations
@implicitNotFound("Pas d'ordonnancement implicite défini pour ${T}.")
Source
Ordering.scala
Depuis

2.7

Voir aussi

scala.math.Ordered, scala.util.Sorting.

Supertypes linéaires
Ordre partiel[T], Equivaut[T], java.io.Serializable, Comparateur[T], AnyRef, Any
Sous-classes connues
ValueOrdering, DeadlineIsOrdered, DurationIsOrdered, FiniteDurationIsOrdered, Fractional, Integral, Numeric, BigDecimalAsIfIntegral, BigDecimalAsIfIntegral, BigDecimalIsConflicted, BigDecimalIsFractional, BigDecimalIsFractional, BigIntIsIntegral, BigIntIsIntegral, ByteIsIntegral, ByteIsIntegral, CharIsIntegral, CharIsIntegral, DoubleIsFractional, DoubleIsFractional, FloatIsFractional, FloatIsFractional, IntIsIntegral, IntIsIntegral, LongIsIntegral, LongIsIntegral, ShortIsIntegral, ShortIsIntegral, BigDecimal, BigDecimalOrdering, BigInt, BigIntOrdering, Boolean, BooleanOrdering, Byte, ByteOrdering, CachedReverse, Char, CharOrdering, IeeeOrdering, IeeeOrdering, TotalOrdering, TotalOrdering, IeeeOrdering, IeeeOrdering, TotalOrdering, TotalOrdering, Int, IntOrdering, Long, LongOrdering, OptionOrdering, Short, ShortOrdering, String, StringOrdering, Symbol, SymbolOrdering, Unit, UnitOrdering, DeprecatedDoubleOrdering, DeprecatedFloatOrdering.

Membres de type

classe OrderingOps étend AnyRef

Membres de la valeur abstraite

abstrait def comparer(x : T, y : T): Int

Renvoie un nombre entier dont le signe communique la façon dont x se compare à y.

Le signe du résultat a la signification suivante :

    négatif si x < ypositive if x > yzéro sinon (si x == y)
Classes de définition
Ordre → Comparateur

Membres concrets de la valeur

final def !=(arg0 : Tout): Booléen

Tester l'inégalité de deux objets.

renvoie

true si !(ceci ==cela), false sinon.

Classes de définition
AnyRef → Any

final def ##(): Int

Équivalent à x.hashCode sauf pour les types numériques encadrés et null. Pour les numériques, il renvoie une valeur de hachage qui est cohérente avec l'égalité des valeurs : si deux instances de type de valeur comparent comme vrai, alors ## produira la même valeur de hachage pour chacune d'elles. Pour null renvoie un code de hachage où null.hashCode lance un NullPointerException.

renvoie

une valeur de hachage compatible avec ==

Classes de définition
AnyRef → Any

def +(autre : Chaîne de caractères): Chaîne de caractères

Implicite
Ce membre est ajouté par une conversion implicite à partir de Ordering.[T] toany2stringadd [Ordering[T]] effectuée par la méthode any2stringadd dans scala.Predef.
Classes de définition
any2stringadd

def ->[B](y : B): (Ordre[T], B)

Implicite
Ce membre est ajouté par une conversion implicite à partir de Ordering.[T] àArrowAssoc[Ordering[T]] effectuée par la méthode ArrowAssoc dans scala.Predef.
Classes de définition
ArrowAssoc
Annotations
@inline()

final def ==(arg0 : Tout): Booléen

L'expression x == that est équivalente à if (x eq null) that eq null else x.equals(that).

renvoie à

true si l'objet récepteur est équivalent à l'argument ; false sinon .

Classes de définition
AnyRef → Any

final def asInstanceOf[T0]: T0

Transforme l'objet récepteur en objet de type T0.

Notez que le succès d'un cast à l'exécution est modulo la sémantique d'effacement de Scala. Par conséquent, l'expression 1.asInstanceOf[String] lancera un ClassCastException au moment de l'exécution, alors que l'expression List(1).asInstanceOf[List[String]] ne le fera pas. Dans ce dernier exemple, comme l'argument type est effacé dans le cadre de la compilation, il n'est pas possible de vérifier si le contenu de la liste est du type demandé.

renvoie

l'objet récepteur.

Classes de définition
Tout
Exceptions lancées

ClassCastException si l'objet récepteur n'est pas une instance de l'effacement de type T0.

def clone(): AnyRef

Créer une copie de l'objet récepteur.

L'implémentation par défaut de l'objet clone est dépendante de la plate-forme.

renvoie à

une copie de l'objet récepteur.

Attributs
protégé[java.lang]
Classes de définition
AnyRef
Annotations
@délais(classeOf[java.lang.CloneNotSupportedException])@native()
Note

non spécifié par SLS comme membre de AnyRef

def assurant(cond : (Ordre[T]) => booléen, msg : => Tout): Ordre de passage[T]

Implicite
Ce membre est ajouté par une conversion implicite de Ordering.[T] àEnsuring[Ordering[T]] effectuée par la méthode Ensuring dans scala.Predef.
Classes de définition
Assurer

def assurant(cond : (Ordre[T]) => booléen): Ordonnance[T]

Implicite
Ce membre est ajouté par une conversion implicite de Ordering.[T] àEnsuring[Ordering[T]] effectuée par la méthode Ensuring dans scala.Predef.
Classes de définition
Assurer

def assurant(cond : booléen, msg : => Tout): Ordre de passage[T]

Implicite
Ce membre est ajouté par une conversion implicite de Ordering.[T] àEnsuring[Ordering[T]] effectuée par la méthode Ensuring dans scala.Predef.
Classes de définition
Assurer

def assurant(cond : booléen): Ordonner[T]

Implicite
Ce membre est ajouté par une conversion implicite de Ordering.[T] àEnsuring[Ordering[T]] effectuée par la méthode Ensuring dans scala.Predef.
Classes de définition
Assurer

final def eq(arg0 : AnyRef): Booléen

Teste si l'argument (that) est une référence à l'objet récepteur (this).

Le site eq implémente une méthode relation d'équivalence sur les instances non nulles de AnyRef, et possède trois propriétés supplémentaires :

    Elle est cohérente : pour toute instance non nulle de AnyRef. x et y de type AnyRef, des invocations multiples de x.eq(y) renvoie systématiquement true ou renvoie systématiquement falsePour toute instance non nulle x de type AnyRef, x.eq(null) et null.eq(x) renvoie false.
    null.eq(null) renvoie à true.

Lorsque l'on remplace l'option equals ou hashCode il est important de s'assurer que leur comportement est cohérent avec l'égalité des références. Par conséquent, si deux objets sont des références l'un à l'autre (o1 eq o2), ils doivent être égaux l'un à l'autre (o1 == o2) et ils doivent être hachés à la même valeur (o1.hashCode == o2.hashCode).

renvoie

true si l'argument est une référence à l'objet récepteur ; false sinon.

Classes de définition
AnyRef

def égale(arg0 : AnyRef): Booléen

La méthode d'égalité pour les types de référence. L'implémentation par défaut délègue à eq.

Voir aussi equals dans scala.Any.

renvoie à

true si l'objet récepteur est équivalent à l'argument ; false sinon .

Classes de définition
AnyRef → Any

def équivaut à(x : T, y : T): Booléen

Retourne vrai si x == y dans la commande.

Classes de définition
Ordre → Ordre partiel → Equiv.

def finaliser(): Unité

Appelé par le garbage collector sur l'objet récepteur lorsqu'il n'y a plus de références à cet objet.

Les détails de quand et si le finalize est invoquée, ainsi que l'interaction entre la méthode finalize et les retours et exceptions non locaux, sont tous dépendants de la plateforme.

Attributs
protégé[java.lang]
Classes de définition
AnyRef
Annotations
@délais(classeOf[java.lang.Throwable])
Note

non spécifié par SLS comme membre de AnyRef

def formaté(fmtstr : Chaîne de caractères): Chaîne de caractères

Renvoie une chaîne de caractères formatée selon les données format donnée. Les chaînes de formatage sont les mêmes que pour String.format (@voir java.lang.String.format).

Implicite
Ce membre est ajouté par une conversion implicite à partir de Ordering[T] àStringFormat[Ordering[T]] effectuée par la méthode StringFormat dans scala.Predef.
Classes de définition
StringFormat
Annotations
@inline()

final def getClass(): Classe[_ <: AnyRef]

Renvoie la représentation de la classe d'exécution de l'objet.

retourne

un objet de classe correspondant au type d'exécution du récepteur.

Classes de définition
AnyRef → Any
Annotations
@native()

def gt(x : T, y : T): Booléen

Retourne vrai si x y dans l'ordre.

Classes de définition
Ordonnancement → PartialOrdering

def gteq(x : T, y : T): Booléen

Retourne vrai si x = y dans l'ordre.

Classes de définition
Ordonnancement → PartialOrdering

def hashCode(): Int

La méthode hashCode pour les types de référence. Voir hashCode dans scala.Any.

retourne

la valeur du code de hachage pour cet objet.

Classes de définition
AnyRef → Any
Annotations
@native()

final def isInstanceOf[T0]: Booléen

Teste si le type dynamique de l'objet récepteur est... T0.

Notez que le résultat du test est modulo la sémantique d'effacement de Scala. Par conséquent, l'expression 1.isInstanceOf[String] retournera false, tandis que l'expression List(1).isInstanceOf[List[String]] renverra true. Dans ce dernier exemple, comme l'argument type est effacé dans le cadre de la compilation, il n'est pas possible de vérifier si le contenu de la liste est du type spécifié.

renvoie

true si l'objet récepteur est une instance d'effacement de type. T0; false sinon .

Classes de définition
Tout

def isReverseOf(autre : Mise en ordre[_]): Booléen

Renvoie si oui ou non l'autre ordonnancement est l'ordonnancement opposé de celui-ci.

Équivalent à other == this.reverse.

Les implémentations ne devraient surcharger cette méthode que si elles surchargent également reverse.

def lt(x : T, y : T): Booléen

Retourne vrai si x y dans l'ordre.

Classes de définition
Ordonnancement → PartialOrdering

def lteq(x : T, y : T): Booléen

Retourne vrai si x <= y dans l'ordre.

Classes de définition
Ordonnancement → PartialOrdering

def max[U <: T](x : U, y : U): U

def min[U <: T](x : U, y : U): U

implicite def mkOrderingOps(lhs : T): Ops de commande

final def ne(arg0 : AnyRef): Booléen

Equivalent à !(this eq that).

renvoie à

true si l'argument n'est pas une référence à l'objet récepteur ; false sinon.

Classes de définition
AnyRef

final def notifier(): Unité

Réveille un seul thread qui est en attente sur le moniteur de l'objet récepteur.

Classes de définition
AnyRef
Annotations
@native()
Note

non spécifié par SLS comme membre de AnyRef

final def notifyAll(): Unité

Réveille tous les threads qui sont en attente sur le moniteur de l'objet récepteur.

Classes de définition
AnyRef
Annotations
@native()
Note

non spécifié par SLS comme membre de AnyRef

def sur[U](f : (U) => T): Commander[U]

Étant donné f, une fonction de U en T, crée un Ordering.[U] dont la fonction de comparaison est équivalente à :

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

def ouElse(autre : Commander[T]): Commander[T]

Crée une commande[T] dont la fonction de comparaison renvoie le résultat de la fonction de comparaison de cet Ordre, s'il est non nul, ou sinon le résultat de others compare function.

autre

un ordre à utiliser si cet ordre renvoie zéro.

Exemple :

    case class Pair(a: Int, b: Int)
    
    val pairOrdering = Ordering.by[Pair, Int](_.a)
                               .orElse(Ordering.by[Pair, Int](_.b))

def ouElseBy[S](f : (T) => S)(implicite ord : Commander[S]): Commander[T]

Étant donné f, une fonction de T dans S, crée un Ordering.[T] dont la fonction de comparaison renvoie le résultat de la fonction de comparaison de cet Ordering, s'il est non nul, ou sinon un résultat équivalent à :

Ordering[S].compare(f(x), f(y))

Cette fonction est équivalente au fait de passer le résultat de Ordering.by(f) à orElse.

Exemple :

    case class Pair(a: Int, b: Int)
    
    val pairOrdering = Ordering.by[Pair, Int](_.a)
                               .orElseBy[Int](_.b)

def inverse: Commander[T]

Renvoie l'ordonnancement opposé à celui-ci.

Les implémentations surchargeant cette méthode DOIVENT surcharger isReverseOf également si elles modifient le comportement du tout (par exemple, la mise en cache ne nécessite pas de la surcharger).

Classes de définition
Ordonnancement → PartialOrdering

def inversé(): Comparateur[T]

Classes de définition
Comparateur

final def synchronisé[T0](arg0 : => T0): T0

Classes de définition
AnyRef

def thenComparaison[U < : Comparable[_ >: U <: AnyRef]](arg0 : java.util.function.Function[_ >: T <: AnyRef, _ <: U]): Comparateur[T]

Classes de définition
Comparateur

def thenComparing[U <: AnyRef](arg0 : java.util.function.Function[_ >: T <: AnyRef, _ <: U], arg1 : Comparateur[_ >: U <: AnyRef]): Comparateur[T]

Classes de définition
Comparateur

def thenComparaison(arg0 : Comparateur[_ >: T <: AnyRef]): Comparateur[T]

Classes de définition
Comparateur

def thenComparingDouble(arg0 : Fonction ToDouble[_ >: T <: AnyRef]): Comparateur[T]

Classes de définition
Comparateur

def thenComparingInt(arg0 : ToIntFunction[_ >: T <: AnyRef]): Comparateur[T]

Classes de définition
Comparateur

def thenComparingLong(arg0 : ToLongFunction[_ >: T <: AnyRef]): Comparateur[T]

Classes de définition
Comparateur

def toString(): Chaîne de caractères

Crée une représentation de type String de cet objet. La représentation par défaut dépend de la plateforme. Sur la plateforme java, c'est la concaténation du nom de la classe, "@", et du hashcode de l'objet en hexadécimal.

renvoie à

une représentation sous forme de chaîne de caractères de l'objet.

Classes de définition
AnyRef → Any

def tryCompare(x : T, y : T): Quelques[Int]

Retourne si une comparaison entre x et y est définie, et si oui, le résultat de compare(x, y).

Classes de définition
Ordonnancement → Ordonnancement partiel

final def attendre(): Unité

Classes de définition
AnyRef
Annotations
@délais(classeOf[java.lang.InterruptedException])

final def attendre(arg0 : Long, arg1 : Int): Unité

Classes de définition
AnyRef
Annotations
@délais(classeOf[java.lang.InterruptedException])

final def attendre(arg0 : Long): Unité

Classes de définition
AnyRef
Annotations
@délais(classeOf[java.lang.InterruptedException])@native()