2013-04-22 4 views
55

値と私は最近、EnumSetと恋に落ちたので、私はallOf()
Javaのフィルリストのすべてのenumは

EnumSet<Something> all = EnumSet.allOf(Something.class); 
List<Something> list = new ArrayList<>(all.size()); 
for(Something s : all) { 
    list.add(s); 
} 
return list; 

を活用列挙
のすべての可能な値のリストを記入したいと思いますありますより良い方法
(非難読化された1つのライナーのように)同じ結果を達成するには?

+0

ArrayListのリスト=新しいArrayListを(は、Arrays.asList(Something.valuesを())) – TacB0sS

答えて

115

を行うことができますAbstractCollectionを拡張私は最初にリストを使用しませんEnumSetのようにsがよりapproriateですが、それはSetインタフェース実装としてあなたが

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

または

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

時々EnumSetはそれをカットしません。特にご注文の場合 – MonoThreaded

+1

@MonoThreadedご注文いただいたご注文は何ですか? EnumSetは列挙型の自然順序です。リストはセットと同じ順序になるので、リストを使用してもここでは何も変更されません。 –

+1

申し訳ありませんが、注文はこの質問の対象外です。最初の例で値()を意味すると思います。 – MonoThreaded

0

これはもう少し読みやすい:

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

次に、単に 'Something.class.getEnumConstants()'を行うだけでいいのですか? – shyam

+1

...または 'Something.values();' –

+0

良い点。私のJavaは明らかに錆びている! – BlackVegetable

9

ArrayList(Collection<? extends E> c) 

あるArrayListのコンストラクタがあり、EnumSetはそうあなただけ

ArrayList<Something> all = new ArrayList<Something>(enumSet) 
1
List<Something> result = new ArrayList<Something>(all); 

EnumSetを行うことができますが、Javaのコレクションです:だから

public interface Set<E> extends Collection<E> 

をあなたはEnumSetで行うことができるコレクションで何でもできます。 Collection<? extends E>とコンストラクタを持つ

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

ArrayListとして:

6

はこれを試してみてください

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

+0

あなたが質問に記載されているように、これからjava.util.ArrayListを取得しないことを明確にする価値があります – planetjones

0

を試してみてください。しかし、実際にEnumSetを使用する場合にのみ、この方法を使用してください。

すべての列挙型は、メソッドvalues()にアクセスできます。これは、すべての列挙値の配列を返します。

あなたが使用することもでき
... = Arrays.asList(Something.values()); 
0

Collections.singletonList(Something.values()) 
関連する問題