95

我想用枚举的所有可能值填写一个列表
自从我最近爱上了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;

有没有更好的方法(如在非混淆的一个班轮中)来达到相同的结果?

4

9 回答 9

192

我不会首先使用列表,因为 EnumSet 更合适,但你可以这样做

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

或者

List<Something> somethingList =
                 new ArrayList<Something>(EnumSet.allOf(Something.class));
于 2013-04-22T14:05:01.800 回答
14

Class.getEnumConstants()

List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants());
于 2014-12-25T09:08:23.227 回答
10

有一个构造函数ArrayList

ArrayList(Collection<? extends E> c) 

现在,EnumSet扩展AbstractCollection所以你可以做

ArrayList<Something> all = new ArrayList<Something>(enumSet)
于 2013-04-22T14:04:54.670 回答
9

尝试

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-04-22T14:06:20.633 回答
1
List<Something> result = new ArrayList<Something>(all);

EnumSet是一个 Java 集合,因为它实现了Set接口:

public interface Set<E> extends Collection<E> 

所以你可以用 Collection 做的任何事情都可以用EnumSet.

于 2013-04-22T14:05:47.490 回答
0

这更具可读性:

Object[] allValues = all.getDeclaringClass().getEnumConstants();
于 2013-04-22T14:04:13.183 回答
0

尝试这个:

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

ArrayList一个带有 . 的构造函数Collection<? extends E>。但是只有当你真的想使用时才使用这种方法EnumSet

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

... = Arrays.asList(Something.values());
于 2013-04-22T14:08:45.437 回答
0

您还可以使用:

Collections.singletonList(Something.values())
于 2016-05-17T14:38:31.023 回答
-3
private ComboBox gender;
private enum Selgender{Male,Famle};
ObservableList<Object> observableList  =FXCollections.observableArrayList(Selgender.values());
于 2018-09-02T11:40:23.467 回答