Je voudrais remplir une liste avec toutes les valeurs possibles d'un enum
Depuis que je suis récemment tombée amoureuse de EnumSet
, j’ai tiré parti de allOf()
EnumSet<Something> all = EnumSet.allOf( Something.class);
List<Something> list = new ArrayList<>( all.size());
for (Something s : all) {
list.add( s);
}
return list;
Y a-t-il un meilleur moyen (comme dans une doublure non obfusquée) pour obtenir le même résultat?
Je ne voudrais pas utiliser une liste dans les premières places car un EnumSet est plus approprié, mais vous pouvez le faire
List<Something> somethingList = Arrays.asList(Something.values());
ou
List<Something> somethingList =
new ArrayList<Something>(EnumSet.allOf(Something.class));
Il y a un constructeur pour ArrayList
qui est
ArrayList(Collection<? extends E> c)
Maintenant, EnumSet
étend AbstractCollection
afin que vous puissiez simplement faire
ArrayList<Something> all = new ArrayList<Something>(enumSet)
List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants());
essayer
enum E {
E1, E2, E3
}
public static void main(String[] args) throws Exception {
List<E> list = Arrays.asList(E.values());
System.out.println(list);
}
List<Something> result = new ArrayList<Something>(all);
EnumSet
est un Java Collection, car il implémente l'interface Set
:
public interface Set<E> extends Collection<E>
Donc, tout ce que vous pouvez faire avec une Collection, vous pouvez le faire avec un EnumSet
.
Essaye ça:
... = new ArrayList<Something>(EnumSet.allOf(Something.class));
comme ArrayList
a un constructeur avec Collection<? extends E>
. Mais utilisez cette méthode uniquement si vous voulez vraiment utiliser EnumSet
.
Tous les enums ont accès à la méthode values()
. Il retourne un tableau de toutes les valeurs enum:
... = Arrays.asList(Something.values());
C'est un peu plus lisible:
Object[] allValues = all.getDeclaringClass().getEnumConstants();
Vous pouvez aussi utiliser:
Collections.singletonList(Something.values())