Javaですべての列挙値をリストに入力する


80

列挙型のすべての可能な値でリストを埋めたい
最近私は恋に落ちたのでEnumSet、私は活用しましたallOf()

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

同じ結果を達成するためのより良い方法はありますか(難読化されていない1つのライナーのように)?


ArrayList <Something> list = new ArrayList <Something>(Arrays.asList(Something.values()))
TacB0sS 2014

回答:


169

EnumSetの方が適切なので、最初はリストを使用しませんが、使用できます。

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

または

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

3
EnumSetがそれをカットしない場合があります。特に注文が重要な場合
モノスレッド2013

1
@MonoThreadedどのような順序を考えていましたか?EnumSetは、列挙型の自然な順序です。リストはセットと同じ順序になるため、リストを使用してもここでは何も変更されません。
Peter Lawrey 2013

1
申し訳ありませんが、注文はこの質問の範囲外です。最初の例ではvalues()を意味していると思います。
モノスレッド2013

@PeterLawrey私たちは常に列挙型を使用しています。ワークフローを設計するとき、承認プロセスがNatural Order列挙型の中で移動しない可能性があるため、aList<Enum>が便利なのはEnumSet。です。
buzzsawddog 2014

EnumSetありますが、get()メソッド(簡単なランダムアクセス)はありListません。これは、List / EnumSetの使用目的が何であれ、重要になる可能性があります
pallgeuer


10

コンストラクタがArrayListあります

ArrayList(Collection<? extends E> c) 

今、あなたがすることができるようにEnumSet拡張AbstractCollectionします

ArrayList<Something> all = new ArrayList<Something>(enumSet)

8

試してみてください

enum E {
    E1, E2, E3
}

public static void main(String[] args) throws Exception {
    List<E> list = Arrays.asList(E.values());
    System.out.println(list);
}

醜いレイアウトだが素晴らしいアプローチ:)
モノスレッド2013

質問で述べられているように、
これから

@MonoThreadedそれはどのように醜いですか?あなたはあなたが求めたものを手に入れます
CAArefe20年

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

EnumSetSetインターフェイスを実装するJavaコレクションです。

public interface Set<E> extends Collection<E> 

つまり、コレクションでできることはすべて、でできることですEnumSet


0

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

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

1
それならあなたは単にSomething.class.getEnumConstants()正しくすることができますか?
shyam 2013

1
...またはSomething.values();
Peter Lawrey 2013

0

これを試して:

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

ArrayListコンストラクタもありCollection<? extends E>ます。ただし、この方法は、本当に使用したい場合にのみ使用してくださいEnumSet

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

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

0

次のものも使用できます。

Collections.singletonList(Something.values())

hexCodeを取得しています
P

-2
private ComboBox gender;
private enum Selgender{Male,Famle};
ObservableList<Object> observableList  =FXCollections.observableArrayList(Selgender.values());
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.