67 votes

Tri Java basé sur des constantes Enum

Nous avons une énumération

 enum listE {
    LE1,
    LE4,
    LE2,
    LE3
}

De plus, nous avons une liste qui contient les chaînes ["LE1","LE2","LE3","LE4"] . Existe-t-il un moyen de trier la liste en fonction de l'ordre défini par l'énumération (pas l'ordre naturel String ).

La liste triée doit être ["LE1", "LE4", "LE2", "LE3"] .

9voto

Cyrille Ka Points 8845

Chaque constante enum a une valeur ordinale correspondant à sa position dans la déclaration enum. Vous pouvez écrire un comparateur pour vos chaînes en utilisant la valeur ordinale de la constante enum correspondante.

8voto

Jigar Joshi Points 116533

values() renvoie dans l'ordre dans lequel elle est définie.

 enum Test{
  A,B,X,D
}

for(Test t: Test.values()){
  System.out.println(t);
}

Sortir

 A
B
X
D

8voto

Watt Points 773

J'ai utilisé ce qui suit pour trier mes List<theEnum> dans un ordre croissant, et cela a bien fonctionné pour moi.

 Collections.sort(toSortEnumList, new Comparator<theEnum>() {
                @Override
                public int compare(theEnum o1, theEnum o2) {
                    return o1.toString().compareTo(o2.toString());
                }
            });

4voto

Ankush Rasse Points 41
public class Student implements Comparable<Student>{

    public String studentName;

    public Student(String name,DayInWeek weekDay){
        this.studentName = name;
        this.studentDays = weekDay;
    }

    public enum DayInWeek {
        SATURDAY, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
    }
    public DayInWeek studentDays;

    @Override
    public int compareTo(Student s1) {
        if(s1.studentDays.ordinal() < this.studentDays.ordinal())
            return 1;
        else if(s1.studentDays.ordinal() > this.studentDays.ordinal())
            return -1;
        else
            return 1;
    }
}

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