将枚举转换为集合/列表


172

是否有一些单线桥接方法将给定的Enumeration转储到java.util.List或java.util.Set?

内置Arrays.asList()或类似的东西Collection.toArray()应该存在于某处,但我无法在IntelliJ调试器的评估器窗口(以及Google / SO结果)中找到。

Answers:


321

您可以使用Collections.list()一个转换EnumerationList在一个行:

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

没有类似的方法来获取Set,但是您仍然可以一行完成:

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

在潜入自动完成下拉菜单时,我不知何故错过了此方法。谢谢!
安东·K


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 '17

我在Google上搜索了“将Java枚举转换为集合”,该线程作为第一个响应返回。@Timur得到我的认可。
ShellDude

-2

我需要同样的东西,并且此解决方案可以正常工作,希望它也可以帮助某人

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

那么您可以获取枚举的.name()。


5
您的答案显示了如何将数组转换为列表,并且只有在您拥有枚举数组时才会发生。问题是关于枚举->列表转换。
kryger
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.