将枚举转换为集/列表

Ant*_*n K 155 java api collections conventions

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

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

Whi*_*g34 297

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

List<T> list = Collections.list(enumeration);
Run Code Online (Sandbox Code Playgroud)

没有类似的方法来获得Set,但你仍然可以做到一行:

Set<T> set = new HashSet<T>(Collections.list(enumeration));
Run Code Online (Sandbox Code Playgroud)


Tim*_*dny 6

如果您需要Set而不是List,您可以使用EnumSet.allOf()

Set<EnumerationClass> set = EnumSet.allOf(EnumerationClass.class);
Run Code Online (Sandbox Code Playgroud)

更新:JakeRobb 是对的。我的回答是关于 java.lang.Enum 而不是 java.util.Enumeration。抱歉不相关的答案。

  • 我很确定提问者是在询问 java.util.Enumeration,它是 Iterator 的旧表亲,而不是 java.lang.Enum,这是您在使用“enum”关键字时得到的东西。 (2认同)

Anu*_*man 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

参考:如何将枚举转换为列表


Ale*_*lex 5

使用番石榴时(参见文档)有Iterators.forEnumeration. 鉴于Enumeration x您可以执行以下操作:

获得一个不可变的集合:

ImmutableSet.copyOf(Iterators.forEnumeration(x));
Run Code Online (Sandbox Code Playgroud)

获取不可变列表:

ImmutableList.copyOf(Iterators.forEnumeration(x));
Run Code Online (Sandbox Code Playgroud)

获取哈希集:

Sets.newHashSet(Iterators.forEnumeration(x));
Run Code Online (Sandbox Code Playgroud)