java的填充值列表

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; 

是否有更好的方法(如在非混淆一个班轮),以达到相同的结果?

+0

ArrayList的名单=新的ArrayList (Arrays.asList(Something.values ())) – TacB0sS 2014-12-25 09:41:29

首先我不会使用List S作为一个EnumSet更approriate但你可以做

List<Something> somethingList = Arrays.asList(Something.values()); 

List<Something> somethingList = 
       new ArrayList<Something>(EnumSet.allOf(Something.class)); 
+3

有时EnumSet不会剪切它。特别是当订单很重要时 – MonoThreaded 2013-04-22 14:06:24

+1

@MonoThreaded你有什么样的订单?枚举集按照自然顺序排列。该列表将与该集合的顺序相同,因此使用列表不会在此更改任何内容。 – 2013-04-22 14:07:35

+1

对不起,订购超出了这个问题的范围。我相信你在第一个例子中的意思是values()。 – MonoThreaded 2013-04-22 14:17:09

这是一个比较可读:

Object[] allValues = all.getDeclaringClass().getEnumConstants(); 
+1

然后你可以简单地执行'Something.class.getEnumConstants()'对吗? – shyam 2013-04-22 14:05:58

+1

...或'Something.values();' – 2013-04-22 14:06:39

+0

好点。我的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); 
} 
+0

丑陋的布局,但不错的方法:) – MonoThreaded 2013-04-22 14:10:58

+0

值得澄清,你没有得到一个java.util.ArrayList出来,如问题中所述 – planetjones 2013-04-22 14:15:34

试试这个:

... = new ArrayList<Something>(EnumSet.allOf(Something.class)); 

ArrayListCollection<? extends E>构造。但只有在您真的想使用EnumSet时才使用此方法。

所有枚举都可以访问方法values()。它返回所有枚举值的数组:

... = Arrays.asList(Something.values()); 

Class.getEnumConstants()

List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants()); 

您还可以使用:

Collections.singletonList(Something.values())