7
votes

Triez une arrayliste d'objets par nom de famille, puis prénom

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 xxx pre>

la sortie doit être p> xxx pré>

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());
                }
            });
        }

    }
}


0 commentaires

4 Réponses :


19
votes

Modifier le comparateur en: xxx


1 commentaires

Aussi, éloignez-vous des boucles imbriquées. Collections.sort fait tout le travail pour vous



5
votes

La réponse de Petar est correcte, juste deux remarques:

  • Utilisez la liste au lieu de arraylist 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 Type (comme LinkedList ...) Plus tard
  • Utilisez des génériques pour rendre votre code plus de type Safe.

    une version améliorée: xxx


0 commentaires

4
votes

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());
}


0 commentaires

2
votes
    //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]

0 commentaires