Comment faire pour trier la liste de tableaux d'objets
J'ai ArrayList, qui containst équipes de football (Équipe de classe). Les équipes ont des points et je veux les trier par nombre de points.
public class Team {
private int points;
private String name;
public Team(String n)
{
name = n;
}
public int getPoints
{
return points;
}
public void addPoints(boolean win)
{
if (win==true)
{
points = points + 3;
}
else if (win==false)
{
points = points + 1;
}
}
//...
}
Classe Principale:
List<Team> lteams = new ArrayList<Team>;
lteams.add(new Team("FC Barcelona"));
lteams.add(new Team("Arsenal FC"));
lteams.add(new Team("Chelsea"));
//then adding 3 points to Chelsea and 1 point to Arsenal
lteams.get(2).addPoints(true);
lteams.get(1).addPoints(false);
//And want sort teams by points (first index with most points).
J'ai fait de mon point de comparaison.
public class MyComparator implements Comparator<Team> {
@Override
public int compare(Team o1, Team o2) {
if (o1.getPoints() > o2.getPoints())
{
return 1;
}
else if (o1.getPoints() < o2.getPoints())
{
return -1;
}
return 0;
}
}
maintenant je veux l'utiliser (classe principale)
Colections.sort(lteams, new MyComparator());
Je veux voir:
- Chelsea
- Arsenal
- Barcelone
Mais il ne fait pas de tri.
Comment êtes-vous ajouter des points à l'équipe? Dans le code que vous avez inclus l'équipe d'objets sont placés directement dans la liste, vous montrez pas de références.
Suivez ce lien:stackoverflow.com/questions/2784514/...
pas de séparer les références de l'équipe d'objets sont nécessaires parce qu'il a un renvoi à la liste d'objet et peut facilement identifier équipe de l'objet à partir de son nom.
stackoverflow.com/a/14475630/922198
désolé, mais c'est un énorme hypothèse
Suivez ce lien:stackoverflow.com/questions/2784514/...
pas de séparer les références de l'équipe d'objets sont nécessaires parce qu'il a un renvoi à la liste d'objet et peut facilement identifier équipe de l'objet à partir de son nom.
stackoverflow.com/a/14475630/922198
désolé, mais c'est un énorme hypothèse
OriginalL'auteur n0hepe | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
Source : Ici
Vous pouvez utiliser
Collections.trier
avec une coutumeComparateur de<Équipe>
.Alternativement, vous pouvez faire
Team implements
Comparable<Équipe>
. Ceci définit la ordre naturel pour tous lesTeam
objets. À l'aide d'unComparator
est plus souple dans la mesure où les différentes implémentations pouvez commander par nom, âge, etc.Voir aussi
Comparable
etComparateur
?Pour être complet, je dois montrer que la
return o1.f - o2.f
comparaison par soustraction raccourci doit être utilisé avec une extrême prudence en raison de possibles débordements (lire: Efficace Java 2nd Edition: Point 12: Envisager la mise en œuvreComparable
). Sans doute le hockey n'est pas un sport où un joueur peut marquer des buts dans le montant qui pourrait entraîner des problèmes =)Voir aussi
Integer.compare()
C'est en gros ce que l'OP a fait!? Sauf qu'il n'a pas créer une classe anonyme
Droit au moment où j'en ai besoin. +1
OriginalL'auteur
}
De sortie:
Chelsea: 3 points
Arsenal FC: 2 points
FC Barcelone: 0 points
OriginalL'auteur
Il n'est pas nécessaire de définir une coutume Comparateur comme ça.
Au lieu de cela, vous pouvez facilement définir une, si vous voulez trier votre liste de tableaux.
Depuis JAVA 8 à l'aide d'lamda
Aussi il y a des options pour deuxième comparateur, si des objets sont égaux sur le premier:
Également noter que le tri par défaut l'option est croissant, mais vous pouvez le configurer pour décroissant à l'aide de:
De cette façon, vous pouvez trier votre liste de tableaux de différentes manières à chaque fois que vous voulez, simplement en ajoutant la méthode que vous souhaitez.
OriginalL'auteur
Utilisez ce lien et vous trouverez la réponse cette
OriginalL'auteur