96 votes

Remplir une liste avec toutes les valeurs d'un enum en Java

Je voudrais remplir une liste avec toutes les valeurs possibles d'un enum.
Puisque je suis récemment tombée amoureuse de EnumSet J'ai tiré parti 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 phrase non obscurcie) pour obtenir le même résultat ?

195voto

Peter Lawrey Points 229686

Je n'utiliserais pas une liste en premier lieu, car un EnumSet est plus approprié, mais vous pouvez faire ce qui suit

List<Something> somethingList = Arrays.asList(Something.values());

ou

List<Something> somethingList =
                 new ArrayList<Something>(EnumSet.allOf(Something.class));

15voto

AZ_ Points 7127

Class.getEnumConstants()

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

10voto

Jack Points 61503

Il existe un constructeur pour ArrayList qui est

ArrayList(Collection<? extends E> c) 

Maintenant, EnumSet étend AbstractCollection donc vous pouvez juste faire

ArrayList<Something> all = new ArrayList<Something>(enumSet)

9voto

Evgeniy Dorofeev Points 52031

Essayez

enum E {
    E1, E2, E3
}

public static void main(String[] args) throws Exception {
    List<E> list = Arrays.asList(E.values());
    System.out.println(list);
}

1voto

planetjones Points 6479
List<Something> result = new ArrayList<Something>(all);

EnumSet est une collection Java, puisqu'elle implémente la fonction Set interface :

public interface Set<E> extends Collection<E> 

Donc tout ce que vous pouvez faire avec une collection, vous pouvez le faire avec une EnumSet .

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