Créez une enum
comme ceci
public enum WeekAndDay {
W1D1(1, 1), W1D2(1, 2) // ...
private int semaine;
private int jour;
private WeekAndDay(int semaine, int jour) {
this.semaine = semaine; this.jour = jour;
}
...
}
Ceci a un ordre naturel et peut être utilisé comme une clé dans un TreeMap
; par exemple
TreeMap map = ...
ou utilisé pour ordonner une liste d'enregistrements (en supposant que les enregistrements ont une clé déclarée de manière appropriée); par exemple
ArrayList enregistrements = ...
Collections.sort(enregistrements, new Comparator{
public int compare(Info i1, Info i2) {
return i1.getWeekAndDay().compareTo(i2.getWeekAndDay());
}});
SUIVI
Dans mon cas, le nombre de semaines et de jours n'est pas connu à l'avance, donc la création d'une énumération ne fonctionnerait pas.
(Cela pourrait fonctionner si vous faites certaines hypothèses / placez certaines limites sur le nombre de valeurs WeekAndDay requises ... mais je suppose que vous ne voulez pas le faire.)
Vous pourriez créer une classe qui se comporte comme une sorte d'énumération dynamique.
- Pas de constructeur public.
- Une méthode de fabrique qui utilise une map de sorte qu'il y ait une instance unique pour chaque paire semaine / jour.
- Une méthode de fabrique surchargée qui prend une chaîne comme argument, par exemple
"W1D1"
.
- Une méthode
toString()
qui se rend en format "W1D1"
.
Cependant, en général, vous ne pourrez pas écrire du code comme ceci (issu de votre question !):
if (currentDay == W2D5) {
prevDay = W2D1;
nextDay = W3D3;
}
Cela nécessiterait que votre code déclare explicitement un tas de constantes comme ceci :
public static final WeekAndDay W2D5 = WeekAndDay.getInstance("W2D5");
public static final WeekAndDay W2D1 = WeekAndDay.getInstance("W2D1");
public static final WeekAndDay W3D3 = WeekAndDay.getInstance("W3D3");
En général, vous ne pouvez pas le faire pour toutes les combinaisons semaine / jour si le nombre de jours et de semaines ne sont pas connus à l'avance.
(D'accord, vous pouvez le faire, mais seulement si l'ensemble de constantes que vous voulez utiliser dans votre code est connu à l'avance. J'exclus la réflexion ici car ce serait une mauvaise solution.)