Преобразовать перечисление в набор / список

110

Есть ли какой-то однострочный мост, чтобы сбрасывать заданное перечисление в java.util.List или java.util.Set?

Что-то встроенное, как Arrays.asList() или Collection.toArray() должно существовать где-то, но я не могу найти это в моем окне анализатора отладчика IntelliJ (и результаты Google/SO тоже).

Спасибо заранее, Антон

Теги:
collections
conventions

6 ответов

208
Лучший ответ

Вы можете использовать Collections.list() для преобразования Enumeration в List в одну строку:

List<T> list = Collections.list(enumeration);

Нет подобного метода для получения Set, однако вы все равно можете сделать это в одной строке:

Set<T> set = new HashSet<T>(Collections.list(enumeration));
  • 0
    Каким-то образом я пропустил этот метод, скрываясь в выпадающем списке автозаполнения. Спасибо!
12

Как насчет этого: ArrayList Collections.list(перечисление e)

5

Существует простой пример преобразования перечисления в список. для этого я использовал метод Collections.list(enum).

public class EnumerationToList {

    public static void main(String[] args) {
        Vector<String> vt = new Vector<String>();
        vt.add("java");
        vt.add("php");
        vt.add("array");
        vt.add("string");
        vt.add("c");

        Enumeration<String> enm = vt.elements();
        List<String> ll = Collections.list(enm);
        System.out.println("List elements: " + ll);
    }

}

Ссылка: Как преобразовать перечисление в список

3

Если вам нужно Set, а не List, вы можете использовать EnumSet.allOf().

Set<EnumerationClass> set = EnumSet.allOf(EnumerationClass.class);

Обновление: JakeRobb прав. Мой ответ о java.lang.Enum вместо java.util.Enumeration. Извините за несвязанный ответ.

  • 2
    Я почти уверен, что спрашивающий спрашивал о java.util.Enumeration, наследующем двоюродном брате Iterator, а не java.lang.Enum, который вы получаете, когда используете ключевое слово enum.
2

При использовании guava (см. doc) существует Iterators.forEnumeration. Учитывая Enumeration x, вы можете сделать следующее:

чтобы получить неизменяемый набор:

ImmutableSet.copyOf(Iterators.forEnumeration(x));

чтобы получить неизменный список:

ImmutableList.copyOf(Iterators.forEnumeration(x));

чтобы получить hashSet:

Sets.newHashSet(Iterators.forEnumeration(x));
0

Мне нужна была та же самая вещь, и это решение работает нормально, надеюсь, что это может помочь кому-то еще.

Enumeration[] array = Enumeration.values();
List<Enumeration> list = Arrays.asList(array);

то вы можете получить .name() вашего перечисления.

  • 5
    Ваш ответ показывает, как преобразовать массив в список, и бывает, что у вас есть массив перечислений. Вопрос был о преобразовании перечисления-> списка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню