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

#api #collections #conventions #java

#java #Коллекции #соглашения

Вопрос:

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

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

Ответ №1:

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

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

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

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

Комментарии:

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

Ответ №2:

Как насчет этого: Collections.list(перечисление e) возвращает ArrayList<T>

Ответ №3:

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

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

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

Комментарии:

1. Я почти уверен, что спрашивающий спрашивал о java.util. Перечисление, устаревший двоюродный брат Iterator, а не java.lang. Перечисление, то, что вы получаете, когда используете ключевое слово ‘enum’.

2. Я выполнил поиск в Google по запросу «java convert enum into a set», и этот поток вернулся в качестве первого ответа. @Timur получает мой положительный отзыв.

Ответ №4:

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

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

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

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

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

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

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

Ответ №5:

Также есть в Apache commons-collections EnumerationUtils.toList(enumeration)

Ответ №6:

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

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

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

Комментарии:

1. Ваш ответ показывает, как преобразовать массив в список, и это происходит только в том случае, если у вас есть массив перечислений. Вопрос касался перечисления-> Преобразования списка.