#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. Ваш ответ показывает, как преобразовать массив в список, и это происходит только в том случае, если у вас есть массив перечислений. Вопрос касался перечисления-> Преобразования списка.