web-dev-qa-db-fra.com

Remplir une liste avec toutes les valeurs enum dans Java

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?

72
MonoThreaded

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));
148
Peter Lawrey

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)
10
Jack

Class.getEnumConstants()

List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants());
9
AZ_

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);
}
7
Evgeniy Dorofeev
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.

1
planetjones

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());
0
Joshua

C'est un peu plus lisible:

Object[] allValues = all.getDeclaringClass().getEnumConstants();
0
BlackVegetable

Vous pouvez aussi utiliser:

Collections.singletonList(Something.values())
0
Topera