Есть ли какой-то однострочный мост, чтобы сбрасывать заданное перечисление в java.util.List или java.util.Set?
Что-то встроенное, как Arrays.asList()
или Collection.toArray()
должно существовать где-то, но я не могу найти это в моем окне анализатора отладчика IntelliJ (и результаты Google/SO тоже).
Спасибо заранее, Антон
Вы можете использовать Collections.list()
для преобразования Enumeration
в List
в одну строку:
List<T> list = Collections.list(enumeration);
Нет подобного метода для получения Set
, однако вы все равно можете сделать это в одной строке:
Set<T> set = new HashSet<T>(Collections.list(enumeration));
Как насчет этого: ArrayList Collections.list(перечисление e)
Существует простой пример преобразования перечисления в список. для этого я использовал метод 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);
}
}
Если вам нужно Set
, а не List
, вы можете использовать EnumSet.allOf().
Set<EnumerationClass> set = EnumSet.allOf(EnumerationClass.class);
Обновление: JakeRobb прав. Мой ответ о java.lang.Enum вместо java.util.Enumeration. Извините за несвязанный ответ.
При использовании guava (см. doc) существует Iterators.forEnumeration
. Учитывая Enumeration x
, вы можете сделать следующее:
чтобы получить неизменяемый набор:
ImmutableSet.copyOf(Iterators.forEnumeration(x));
чтобы получить неизменный список:
ImmutableList.copyOf(Iterators.forEnumeration(x));
чтобы получить hashSet:
Sets.newHashSet(Iterators.forEnumeration(x));
Мне нужна была та же самая вещь, и это решение работает нормально, надеюсь, что это может помочь кому-то еще.
Enumeration[] array = Enumeration.values();
List<Enumeration> list = Arrays.asList(array);
то вы можете получить .name() вашего перечисления.