java的填充值列表
我想填充列表与枚举
因为我最近迷上了EnumSet
的所有可能的值,我利用allOf()
java的填充值列表
EnumSet<Something> all = EnumSet.allOf(Something.class);
List<Something> list = new ArrayList<>(all.size());
for(Something s : all) {
list.add(s);
}
return list;
是否有更好的方法(如在非混淆一个班轮),以达到相同的结果?
首先我不会使用List S作为一个EnumSet更approriate但你可以做
List<Something> somethingList = Arrays.asList(Something.values());
或
List<Something> somethingList =
new ArrayList<Something>(EnumSet.allOf(Something.class));
有时EnumSet不会剪切它。特别是当订单很重要时 – MonoThreaded 2013-04-22 14:06:24
@MonoThreaded你有什么样的订单?枚举集按照自然顺序排列。该列表将与该集合的顺序相同,因此使用列表不会在此更改任何内容。 – 2013-04-22 14:07:35
对不起,订购超出了这个问题的范围。我相信你在第一个例子中的意思是values()。 – MonoThreaded 2013-04-22 14:17:09
这是一个比较可读:
Object[] allValues = all.getDeclaringClass().getEnumConstants();
然后你可以简单地执行'Something.class.getEnumConstants()'对吗? – shyam 2013-04-22 14:05:58
...或'Something.values();' – 2013-04-22 14:06:39
好点。我的java显然是生锈的! – BlackVegetable 2013-04-22 14:07:13
没有为ArrayList
一个构造函数,是
ArrayList(Collection<? extends E> c)
现在,EnumSet
延伸AbstractCollection
,所以你可以做
ArrayList<Something> all = new ArrayList<Something>(enumSet)
List<Something> result = new ArrayList<Something>(all);
EnumSet
是一个Java集合,因为它实现了Set
接口:
public interface Set<E> extends Collection<E>
所以你可以用一个EnumSet
做的任何你可以做的任何事情。
尝试
enum E {
E1, E2, E3
}
public static void main(String[] args) throws Exception {
List<E> list = Arrays.asList(E.values());
System.out.println(list);
}
丑陋的布局,但不错的方法:) – MonoThreaded 2013-04-22 14:10:58
值得澄清,你没有得到一个java.util.ArrayList出来,如问题中所述 – planetjones 2013-04-22 14:15:34
试试这个:
... = new ArrayList<Something>(EnumSet.allOf(Something.class));
为ArrayList
有Collection<? extends E>
构造。但只有在您真的想使用EnumSet
时才使用此方法。
所有枚举都可以访问方法values()
。它返回所有枚举值的数组:
... = Arrays.asList(Something.values());
List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants());
您还可以使用:
Collections.singletonList(Something.values())
ArrayList的名单=新的ArrayList (Arrays.asList(Something.values ())) –
TacB0sS
2014-12-25 09:41:29