【发布时间】:2011-08-02 10:06:40
【问题描述】:
是否有一些单线桥接方法可以将给定的枚举转储到java.util.List 或java.util.Set?
像 Arrays.asList() 或 Collection.toArray() 这样的内置内容应该存在于某处,但我无法在 IntelliJ 调试器的评估器窗口中找到它(以及 Google/SO 结果)。
【问题讨论】:
标签: java collections conventions
是否有一些单线桥接方法可以将给定的枚举转储到java.util.List 或java.util.Set?
像 Arrays.asList() 或 Collection.toArray() 这样的内置内容应该存在于某处,但我无法在 IntelliJ 调试器的评估器窗口中找到它(以及 Google/SO 结果)。
【问题讨论】:
标签: java collections conventions
您可以使用Collections.list() 在一行中将Enumeration 转换为List:
List<T> list = Collections.list(enumeration);
没有类似的方法来获取Set,但是你仍然可以一行完成:
Set<T> set = new HashSet<T>(Collections.list(enumeration));
【讨论】:
这个怎么样:Collections.list(Enumeration e) 返回一个ArrayList<T>
【讨论】:
我需要同样的东西,这个解决方案工作正常,希望它也可以帮助别人
Enumeration[] array = Enumeration.values();
List<Enumeration> list = Arrays.asList(array);
然后你可以得到你的枚举的 .name()。
【讨论】:
有一个将枚举转换为列表的简单示例。为此,我使用了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。对不起,不相关的答案。
【讨论】:
使用番石榴时(参见doc)有Iterators.forEnumeration。给定Enumeration x,您可以执行以下操作:
获得一个不可变的集合:
ImmutableSet.copyOf(Iterators.forEnumeration(x));
获取不可变列表:
ImmutableList.copyOf(Iterators.forEnumeration(x));
得到一个hashSet:
Sets.newHashSet(Iterators.forEnumeration(x));
【讨论】:
Apache commons-collections 中也有
EnumerationUtils.toList(enumeration)
【讨论】: