Comment sortinger Arraylist d’objects

J’ai ArrayList, qui contient les équipes de football (classe class). Les équipes ont des points et je veux les sortinger par nombre de points.

public class Team { private int points; private Ssortingng name; public Team(Ssortingng 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 lteams = new ArrayList; 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 mon comparateur.

  public class MyComparator implements Comparator { @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 (en classe principale)

  Colections.sort(lteams, new MyComparator()); 

Je veux voir:

  1. Chelsea
  2. Arsenal
  3. Barcelone

Mais ça ne sortinge pas.

Source: ici

Vous pouvez utiliser Collections.sort avec un Comparator .

  class Team { public final int points; // ... }; List players = // ... Collections.sort(players, new Comparator() { @Override public int compare(Team p1, Team p2) { return p1.points- p2.points; } }); 

Vous pouvez également faire en sorte que l’ Team implements Comparable . Ceci définit l’ ordre naturel pour tous les objects de l’ Team . L’utilisation d’un Comparator est plus flexible en ce que différentes implémentations peuvent classer par nom, âge, etc.

Voir également

  • Java: Quelle est la différence entre l’implémentation de Comparable et de Comparator ?

Pour être complet, je return o1.f - o2.f que le return o1.f - o2.f comparaison par soustraction doit être utilisé avec une extrême prudence en raison de possibles débordements (lire: Effective Java 2nd Edition: Point 12: envisagez de mettre en œuvre Comparable ). Vraisemblablement, le hockey n’est pas un sport dans lequel un joueur peut marquer des buts d’un montant qui causerait des problèmes =)

Voir également

  • Java Integer: Qu’est-ce qu’une comparaison ou soustraction plus rapide?
 public class Team { private int points; private Ssortingng name; public Team(Ssortingng n, int p) { name = n; points = p; } public int getPoints() { return points; } public Ssortingng getName() { return name; } public static void main(Ssortingng[] args) { List lteams = new ArrayList(); lteams.add(new Team("FC Barcelona", 0)); lteams.add(new Team("Arsenal FC", 2)); lteams.add(new Team("Chelsea", 3)); Collections.sort(lteams, new MyComparator()); for (Team lteam : lteams) { System.out.println(lteam.name + ": " + lteam.points + " points"); } } 

}

 class MyComparator implements Comparator { @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; }} 

Sortie:
Chelsea: 3 points
Arsenal FC: 2 points
FC Barcelone: ​​0 points

Il n’est pas vraiment nécessaire de définir un comparateur personnalisé comme celui-ci.

Au lieu de cela, vous pouvez facilement en définir un lorsque vous souhaitez sortinger votre ArrayList.

Depuis JAVA 8 en utilisant lamda

  // Sort version. Iteams.sort(Comparator.comparing(Team::getPoints)); // Complete version. Iteams.sort((o1, o2) -> o1.getPoints().compareTo(o2.getPoints())); 

Il existe également des options pour le second comparateur , si les objects sont égaux sur le premier:

  // eg if same points, then compare their names. Iteams.sort(Comparator.comparing(Team::getPoints).thenComparing(Team::getName)); 

Notez également que l’option de sorting par défaut est croissante , mais que vous pouvez la définir en mode décroissant à l’ aide de:

  // eg Sort by points descending. Iteams.sort(Comparator.comparing(Team::getPoints).reversed()); 

De cette façon, vous pouvez sortinger votre ArrayList de différentes manières à tout moment, en ajoutant simplement la méthode souhaitée.

Utilisez ce lien et vous trouverez la réponse à cette question.