Tri d'une Liste d'Objets Basé sur 1 de ses Champs
Bonjour stackoverflow de la communauté!
Je suis nouveau sur ces forums et également assez nouveau pour java et android de programmation--qui se trouvent être les objets de ma question, donc désolé par avance pour les erreurs!
Mon problème est le tri. Je suis à la recherche d'une méthode pour trier des objets en fonction sur un domaine que j'ai choisi (pas de tri basé sur le premier champ, puis la suivante, etc. illustré par comparateur de chaînage). Je crois que j'ai trouvé la solution à mon problème:
https://stackoverflow.com/a/5113108/1549672
mais j'ai du mal à réellement obtenir que cela fonctionne. Je soupçonne que je suis probablement le manque de quelque chose à cause de mon manque de java de l'expérience, de sorte que toute aide est la bienvenue!
Voici ce que je suis en train d'essayer:
Que ma classe-
public class ItemLocation {
String title;
int id;
}
Que ma fonction-
public void sort(final String field, List<ItemLocation> itemLocationList) {
Collections.sort(itemLocationList, new Comparator<ItemLocation>() {
@Override
public int compare(ItemLocation o1, ItemLocation o2) {
if(field.equals("title")) {
return o1.title.compareTo(o2.title);
} else if(field.equals("id")) {
return Integer.valueOf(o1.id).compareTo(o2.id);
}
return 0;
}
});
}
à l'aide de ces, quelqu'un pourrait peut-être donner un exemple d'utilisation de cette méthode? J'ai essayé de remplir une liste de tableaux et à les trier, mais en vain.
Merci pour l'aide!
OriginalL'auteur user1549672 | 2012-08-02
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas retourner
0
de laComparateur.comparez
méthode si elles ne sont pas égales. C'est "okey" par le contrat, mais pas de nature à favoriser, à partir de la documentation de l'API:À mon avis vous devriez retourner un spécifique
Comparateur
pour chaque champ à la place:OriginalL'auteur dacwe
Pouvez-vous poster le code d'appel qui ne fonctionne pas? Je ne peux pas voir clairement rien de mal avec le code que vous avez fournis.
Tout d'abord, vous pouvez essayer est de mettre un else cas comme:
Pour le moment, si vous avez eu une faute de frappe dans votre code appelant, la comparaison serait toujours 0, ce qui laisserait la liste triée.
Une façon plus robuste de passer le champ serait de déclarer un enum:
Ensuite vos conditions deviendrait:
et ainsi de suite. Ce qui permettrait de réduire les chances de faire une faute de frappe (le compilateur va vous dire si vous n').
OriginalL'auteur Martin
Je ne vois rien de mal, sauf
returning 0
et en comparant paramètre avecequals
. vous pouvez l'améliorer enthrowing RuntimeException
plutôt quereturning 0
et l'utilisationequalsIgnoreCase
plutôt queequals
méthode , mieux ignorer le cas de paramètre.OriginalL'auteur amicngh
1. Si vous voulez Trier les objets sur la base d'un seul attribut, puis aller pour
java.lang.Comparable
Interface avecCollections.sort(List<T> list)
2. Si vous souhaitez Trier les objets sur la base de plus que l'un des attributs de, puis aller pour
java.util.Comparator
Interface avecCollections.sort(List<T> list, Comparator<? super T> c)
Ya.. c'est ce que mon 1er point suggèrent..... tri sur la base d'un attribut. Le 2ème point est un add-on pour la connaissance supplémentaire
OriginalL'auteur Kumar Vivek Mitra