86 votes

Trier la collection Java

J'ai une collection Java :

 Collection<CustomObject> list = new ArrayList<CustomObject>();

CustomObject a un id maintenant avant la liste d'affichage Je veux trier cette collection par ce id .

Y a-t-il un moyen pour que je puisse le faire?

168voto

Kowser Points 3805

Utiliser un comparateur :

 List<CustomObject> list = new ArrayList<CustomObject>();
Comparator<CustomObject> comparator = new Comparator<CustomObject>() {
    @Override
    public int compare(CustomObject left, CustomObject right) {
        return left.getId() - right.getId(); // use your logic
    }
};

Collections.sort(list, comparator); // use the comparator as much as u want
System.out.println(list);

De plus, si CustomObject implémente Comparable , utilisez simplement Collections.sort(list)

Avec JDK 8, la syntaxe est beaucoup plus simple.

 List<CustomObject> list = getCustomObjectList();
Collections.sort(list, (left, right) -> left.getId() - right.getId());
System.out.println(list);

Beaucoup plus simple

 List<CustomObject> list = getCustomObjectList();
list.sort((left, right) -> left.getId() - right.getId());
System.out.println(list);

Le plus simple

 List<CustomObject> list = getCustomObjectList();
list.sort(Comparator.comparing(CustomObject::getId));
System.out.println(list);

Évidemment, le code initial peut également être utilisé pour le JDK 8.

12voto

Shawn Vader Points 3080

Un exemple légèrement différent dit si vous avez une classe qui n'implémente pas Comparable mais que vous voulez toujours la trier sur un champ ou une méthode.

 Collections.sort(allMatching, new Comparator<ClassOne>() {
  @Override public int compare(final ClassOne o1, final ClassOne o2) {
    if (o1.getMethodToSort() > o2.getMethodToSort()) {
      return 1;
    } else if (o1.getMethodToSort() < o2.getMethodToSort()) {
      return -1;
    }  
    return 0;
  }
});

8voto

Hunter McMillen Points 17717

Vous devez implémenter l'interface Comparator

Exemple:

 public class CustomComparator implements Comparator<CustomObject> 
{
    @Override
    public int compare(CustomObject o1, CustomObject o2) {
        return o1.getId().compareTo(o2.getId());
    }
}

Ensuite, vous pouvez utiliser la méthode Collections.sort()

 Collections.sort(list, new CustomComparator());

5voto

DwB Points 14687

Implémentez l' interface Comparable sur votre customObject.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X