J'ai une arrayliste de différents types de joueurs basés sur le sport. J'ai besoin de trier la liste des joueurs dans le tableau par nom de famille pour commencer. Si 2 joueurs ont le même nom de famille, il doit alors trier ces 2 joueurs par le prénom.
Exemple: format nom nom nominal la sortie doit être p> ce que j'ai maintenant uniquement par le premier ou le dernier. Je l'ai par le dernier guichet automatique de mon code. P> public static void sortPlayers(ArrayList playerList) {
for (int i = 0; i < playerList.size(); i++) {
for (int j = 0; j < playerList.size(); j++) {
Collections.sort(playerList, new Comparator() {
public int compare(Object o1, Object o2) {
PlayerStats p1 = (PlayerStats) o1;
PlayerStats p2 = (PlayerStats) o2;
return p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName());
}
});
}
}
}
4 Réponses :
Modifier le comparateur en:
Aussi, éloignez-vous des boucles imbriquées. Collections.sort fait tout le travail pour vous
La réponse de Petar est correcte, juste deux remarques:
code> au lieu de arraylist code> comme argument de méthode, car l'interface est plus générale, et la méthode fonctionnera même si vous passez à une autre liste Code> Type (comme LinkedList CODE> ...) Plus tard LI>
- Utilisez des génériques pour rendre votre code plus de type Safe. LI>
ul>
une version améliorée: p> xxx pré> p>
Utilisation de Java8 Il est facile de le faire:
public List<PlayerStats> getSortedPlayerList(List<PlayerStats> playerList) {
return playerList.stream().sorted(Comparator.comparing(PlayerStats::getPlayerLastName).thenComparing(PlayerStats::getPlayerFirstName)).collect(Collectors.toList());
}
//requires java@8
//class Person { String fName; String lName; int id}
List<Person> list = new ArrayList<>();
Person p1 = new Person();
p1.setfName("a");
p1.setlName("x");
list.add(p1 );
Person p4 = new Person();
p4.setfName("b");
p4.setlName("z");
list.add(p4);
Person p3 = new Person();
p3.setfName("a");
p3.setlName("z");
list.add(p3);
Person p2 = new Person();
p2.setfName("a");
p2.setlName("y");
list.add(p2);
//sort by a single field
Collections.sort(list, (o1,o2) -> o1.getfName().compareTo(o2.getfName()));
//sort by multiple cascading comparator.
Collections.sort(list, Comparator.comparing(Person::getfName).thenComparing(Person::getlName));
list.forEach( System.out::println);
//output
//Person [fName=a, lName=x, id=null]
//Person [fName=a, lName=y, id=null]
//Person [fName=a, lName=z, id=null]
//Person [fName=b, lName=z, id=null]