将枚举转换为集合/列表

226

是否有一种单行桥接方法可以将给定的Enumeration转储到java.util.Listjava.util.Set

应该存在像Arrays.asList()Collection.toArray()这样的内置方法,但我无法在我的IntelliJ调试器的求值器窗口(以及Google/SO结果)中找到。

6个回答

406

你可以使用Collections.list()在一行代码中将Enumeration转换为List

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

没有类似的方法可以获取一个Set,但你仍然可以用一行代码完成:

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

在自动完成下拉菜单中潜伏时,我不知何故错过了这个方法。谢谢! - Anton Kraievyi

31

11

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

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

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


3
我相信提问者询问的是 java.util.Enumeration,它是 Iterator 的传统类似物,而不是 java.lang.Enum,当你使用 'enum' 关键字时得到的东西。请注意,这里涉及到的是 Java 编程语言相关的概念。 - JakeRobb
我在谷歌上搜索了“java将枚举转换为集合”,这个线程作为第一个响应返回。@Timur得到了我的赞同。 - ShellDude

5
使用guava(请参见 文档),可以使用Iterators.forEnumeration。给定Enumeration x,您可以执行以下操作:

获取一个不可变的Set:

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

获取一个不可变的列表:

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

获取一个哈希集合:

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

1

在Apache commons-collections中也有 EnumerationUtils.toList(enumeration)


-2

我也需要同样的东西,这个解决方案很好用,希望它也能帮助到其他人

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

然后你可以获取枚举的 .name()。


5
你的回答展示了如何将数组转换为列表,但是它仅适用于你有一个枚举类型的数组。问题是关于枚举类型到列表的转换。 - kryger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接