Chciałbym wypełnić listę wszystkimi możliwymi wartościami wyliczenia
Odkąd niedawno się zakochałem EnumSet
, wykorzystałemallOf()
EnumSet<Something> all = EnumSet.allOf( Something.class);
List<Something> list = new ArrayList<>( all.size());
for (Something s : all) {
list.add( s);
}
return list;
Czy jest lepszy sposób (jak w przypadku nie zaciemnionej wkładki), aby osiągnąć ten sam wynik?
Odpowiedzi:
Nie użyłbym listy w pierwszej kolejności, ponieważ EnumSet jest bardziej odpowiedni, ale możesz to zrobić
lub
List<Something> somethingList = new ArrayList<Something>(EnumSet.allOf(Something.class));
źródło
Natural Order
Enum, dlategoList<Enum>
przydaje się plikEnumSet
.EnumSet
nie maget()
metody (łatwy dostęp losowy), aList
nie. Może to być ważne dla wszystkiego, do czego List / EnumSet jest przeznaczonyClass.getEnumConstants()
źródło
Jest konstruktor, dla
ArrayList
którego jestTeraz
EnumSet
rozszerza się,AbstractCollection
więc możesz to zrobićArrayList<Something> all = new ArrayList<Something>(enumSet)
źródło
próbować
enum E { E1, E2, E3 } public static void main(String[] args) throws Exception { List<E> list = Arrays.asList(E.values()); System.out.println(list); }
źródło
List<Something> result = new ArrayList<Something>(all);
EnumSet
jest kolekcją Java, ponieważ implementujeSet
interfejs:public interface Set<E> extends Collection<E>
Więc wszystko, co możesz zrobić z kolekcją, możesz zrobić z plikiem
EnumSet
.źródło
To jest trochę bardziej czytelne:
źródło
Something.class.getEnumConstants()
dobrze?Something.values();
Spróbuj tego:
... = new ArrayList<Something>(EnumSet.allOf(Something.class));
jak
ArrayList
ma konstruktor zCollection<? extends E>
. Ale używaj tej metody tylko wtedy, gdy naprawdę chcesz użyćEnumSet
.Wszystkie wyliczenia mają dostęp do metody
values()
. Zwraca tablicę wszystkich wartości wyliczenia:źródło
Możesz również użyć:
źródło
private ComboBox gender; private enum Selgender{Male,Famle}; ObservableList<Object> observableList =FXCollections.observableArrayList(Selgender.values());
źródło