Java de Tri: le tri d'un tableau d'objets en propriété, l'objet n'est pas autorisé à utiliser Comparables
J'ai une classe, une Bibliothèque, qui contient un tableau d'objets de page, et j'ai besoin de trier le tableau basé sur les propriétés de la Livre, soit le Titre ou PageNumber. Le problème est que je ne suis pas autorisé à utiliser la même classe avec le Livre. Comment recommanderiez-vous que je sorte la matrice de Livres dans la bibliothèque? Écrire mon propre genre? Ou est-il un moyen plus facile? Si vous avez besoin d'extraits de code, il suffit de demander!
Et pouvez-vous utiliser un
Je peux, dans une Bibliothèque, mais pas dans le Livre.
Est-ce une limitation artificielle, comme dans un acte de cession, ou il y a une autre raison?
C'est une affectation, de façon artificielle.
Comparator
?Je peux, dans une Bibliothèque, mais pas dans le Livre.
Est-ce une limitation artificielle, comme dans un acte de cession, ou il y a une autre raison?
C'est une affectation, de façon artificielle.
OriginalL'auteur samuraiseoul | 2012-09-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez fournir un
Comparator
pour la comparaison de n'importe quel type que vous souhaitez,Comparable
ou autrement.Pour les Tableaux et les Collections que vous utilisez
Même des collections triées comme TreeSet peut prendre un personnalisé Comparateur de
par exemple
Vous pouvez l'utiliser partout où vous avez besoin de trier la collection. c'est à dire qu'il peut être n'importe où, et où est le meilleur est à vous.
Tout comme l'exemple oui. Si l'ensemble de la matrice n'est peuplée que vous devez utiliser
Arrays.sort(array, start, end, comparator);
J'ai été en mesure de confirmer ce fut en effet une erreur de l'utilisateur, ma comparaison était nul à l'époque, j'étais en invoquant
sort
. Merci de nous aider en faisant le tri @PeterLawrey.Pas de jeu de mots 🙂
OriginalL'auteur Peter Lawrey
Si vous pouvez utiliser
Comparators
, écrire pour chaque type de tri que vous avez besoin, par exemple, de l'ascension pour le titre du livre et décroissant pour le numéro de page. Lecompare
méthode deComparator
doit retourner positif si le premier argument est plus grand que le second, négatif si la première est plus petite et zéro si elles sont égales.OriginalL'auteur Bruno Kim
Coller ceci dans votre Bibliothèque:
bookComparator sera une instance de mise en œuvre de la Comparaison de l'interface qui prend en compte le livre des propriétés spécifiques (e.g.titre, ISBN, etc..) . Dans cet exemple liste compilée est une Liste qui est facile à obtenir à partir d'un tableau mais vous pouvez vous en tenir à la matrice et à faire: les Tableaux.de tri(bookArray, bookComparator);
OriginalL'auteur David Soroko
Expansion @PeterLawrey la réponse de Java 8, vous pouvez maintenant utiliser un Expression Lambda au lieu d'un
Comparable<T>
délégué:OriginalL'auteur Yuval Itzchakov
créer un nouveau treeMap et échanger les rôles entre une clé et une valeur.
TreeMap<Title ,Book> treeMap = new TreeMap<Title,Book>();
Copier toutes les données de la nouvelle TreeMap.
Vous avez maintenant une collection triée basée sur le Titre. (Et pas de Comparateur nécessaire :))
OriginalL'auteur moshik