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


172

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

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

Ответы:


322

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

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

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

Set<T> set = new HashSet<T>(Collections.list(enumeration));

Каким-то образом я пропустил этот метод, скрываясь в выпадающем списке автозаполнения. Спасибо!
Антон К


5

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

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

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

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

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

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

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

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.
JakeRobb

Я сделал поиск в Google по запросу "java convert enum to a set", и эта тема вернулась в качестве первого ответа. @ Тимур получил мой голос.
ShellDude

-2

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

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

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


5
Ваш ответ показывает, как преобразовать массив в список, и бывает, что у вас есть массив перечислений. Вопрос был по поводу перечисления-> преобразования списка.
Кригер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.