Подтвердить что ты не робот

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;

Есть ли лучший способ (как в не обфускации одного лайнера) для достижения того же результата?

4b9b3361

Ответ 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)

Ответ 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())