Java fill Список со всеми значениями перечисления
Я хотел бы заполнить список всеми возможными значениями перечисления
Поскольку я недавно влюбился в EnumSet
, я использовал allOf()
EnumSet<Something> all = EnumSet.allOf( Something.class);
List<Something> list = new ArrayList<>( all.size());
for( Something s : all) {
list.add( s);
}
return list;
Есть ли лучший способ (как в не обфускации одного лайнера) для достижения того же результата?
Ответы
Ответ 1
Я бы не использовал List в первых местах, поскольку EnumSet более удобен, но вы можете сделать
List<Something> somethingList = Arrays.asList(Something.values());
или
List<Something> somethingList =
new ArrayList<Something>(EnumSet.allOf(Something.class));
Ответ 2
Существует конструктор для ArrayList
, который
ArrayList(Collection<? extends E> c)
Теперь EnumSet
расширяет AbstractCollection
, поэтому вы можете просто сделать
ArrayList<Something> all = new ArrayList<Something>(enumSet)
Ответ 3
Class.getEnumConstants()
List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants());
Ответ 4
попробовать
enum E {
E1, E2, E3
}
public static void main(String[] args) throws Exception {
List<E> list = Arrays.asList(E.values());
System.out.println(list);
}
Ответ 5
List<Something> result = new ArrayList<Something>(all);
EnumSet
представляет собой сборку Java, поскольку она реализует интерфейс Set
:
public interface Set<E> extends Collection<E>
Итак, все, что вы можете сделать с коллекцией, которую вы можете сделать с помощью EnumSet
.
Ответ 6
Это более читаемо:
Object[] allValues = all.getDeclaringClass().getEnumConstants();
Ответ 7
Попробуйте следующее:
... = new ArrayList<Something>(EnumSet.allOf(Something.class));
as ArrayList
имеет конструктор с Collection<? extends E>
. Но используйте этот метод, только если вы действительно хотите использовать EnumSet
.
Все перечисления имеют доступ к методу values()
. Он возвращает массив всех значений перечисления:
... = Arrays.asList(Something.values());
Ответ 8
Вы также можете использовать:
Collections.singletonList(Something.values())