Kotlin les expressions d'objet: Comparateur exemple
Ce code fondamentalement trie le tableau par ordre décroissant:
val arrayList = arrayListOf(1, 5, 2)
Collections.sort(arrayList, object : Comparator<Int> {
override fun compare(x : Int, y: Int) = y - x
})
Comment dans le monde ne surchargeant la méthode de comparaison avec y - x
œuvres? Comment Kotlin savoir ce y - x
moyens à mettre y
avant x
si y < x
?
Voir aussi stackoverflow.com/questions/33640864/... par exemple de kotlin tri des aides dans stdlib.
OriginalL'auteur Rafael Saraiva | 2015-10-30
Vous devez vous connecter pour publier un commentaire.
Cela n'a rien à voir avec Kotlin. C'est lié à l'API Java du Comparateur de l'interface, et comment des Collections.tri utilise.
De la documentation:
Maintenant, nous allons essayer cela pour les arguments que vous avez donné:
Collections.sort
ne sais rien à propos de ce y - x moyens. Simplement, il respecte le contrat défini de la Comparaison de l'interface que tout réalisateur doit également respecter (si il veut travailler).Il se trouve que
y - x
est une mise en œuvre qui ne l'égard de ce contrat, parce que les Mathématiques.y - x
est pas une mise en œuvre que ne l'égard de ce contrat. Au moins pas dans le cas général, où débordement d'entier peut conduire à un comportement indéfini. (Pour les nombres positifs, il fonctionne, cependant).Bon point, il est préférable d'utiliser une comparaison: stackoverflow.com/questions/2728793/...
OriginalL'auteur eski
Depuis Comparateur est un SAM interface, vous pouvez écrire ce code plus concis en utilisant un lambda:
Ou même
depuis le lambda est le dernier paramètre de la
sort
la fonction et le type de données dex
ety
peut être déduite.La prise de deux objets et d'avoir à définir un unique entier pour eux, c'est une abstraction d'une sorte de définition. En gros, vous avez spécifier l'ordre dans lequel ces éléments seraient placées de manière si triés.
Pour le tri des entiers ça peut paraître exagéré, mais envisager d'avoir à trier les objets les plus complexes, par exemple les instances d'une classe
Car
.Cette classe a
colorCode
et vous souhaitez trier par:Qui est de savoir comment vous définissez une commande pour ces objets de façon abstraite.
OriginalL'auteur Willi Mentzel
Dans Kotlin vous pouvez également trier les éléments à l'aide de la kotlin collections extension des fonctions de tri, de les trier, les sortBy .... etc
ou
OriginalL'auteur Fredy Mederos