Iterácia nad hodnotami Enum v Jave

1. Prehľad

Enum v Jave je dátový typ, ktorý nám pomáha priraďovať preddefinovanú sadu konštánt k premennej.

V tomto rýchlom článku si ukážeme rôzne spôsoby, ako môžeme iterovať cez Enum v Jave.

2. Iterácia Enum Hodnoty

Najprv definujme Enum, aby sme mohli vytvoriť niekoľko jednoduchých príkladov kódu:

verejné enum DaysOfWeekEnum {NEDEĽA, PONDELOK, UTOROK, STREDA, ŠTVRTOK, PIATOK, SOBOTA} 

Enumy nemajú metódy na opakovanie typu pre každý() alebo iterátor (). Namiesto toho môžeme použiť pole Enum hodnoty vrátené hodnoty () metóda.

2.1. Iterujte použitie pre slučku

Po prvé, môžeme jednoducho použiť starú školu pre slučka:

pre (DaysOfWeekEnum deň: DaysOfWeekEnum.values ​​()) {System.out.println (deň); }

2.2. Iterovať pomocou Prúd

Môžeme tiež použiť java.util.Stream. Aby sme mohli vykonávať operácie na Enum hodnoty.

Ak chcete vytvoriť Prúd máme dve možnosti, jednu využívame Stream.of:

Stream.of (DaysOfWeekEnum.values ​​());

Iný, pomocou Polia.prúd:

Arrays.stream (DaysOfWeekEnum.values ​​());

Rozširujme teda DaysOfWeekEnum triedy na vytvorenie príkladu pomocou Prúd:

verejné enum DaysOfWeekEnum {NEDEĽA ("vypnuté"), PONDELOK ("pracovné"), UTOROK ("pracovné"), STREDA ("pracovné"), ŠTVRTOK ("pracovné"), PIATOK ("pracovné"), SOBOTA ("vypnuté") "); private String typeOfDay; DaysOfWeekEnum (reťazec typeOfDay) {this.typeOfDay = typeOfDay; } // štandardné getre a setre verejné statické Stream stream () {návrat Stream.Of (DaysOfWeekEnum.values ​​()); }}

Teraz napíšeme príklad na vytlačenie dní pracovného pokoja:

public class EnumStreamExample {public static void main () {DaysOfWeekEnum.stream () .filter (d -> d.getTypeOfDay (). equals ("off")) .forEach (System.out :: println); }}

Výstup, ktorý dostaneme, keď spustíme toto:

NEDEĽA SOBOTA

2.3. Iterovať pomocou pre každý()

The pre každý() metóda bola pridaná do Iterable rozhranie v Jave 8. Takže všetky triedy zbierky java majú implementácie a pre každý() metóda. Aby sme ich mohli použiť s Enum, musíme najskôr Enum previesť na vhodnú kolekciu. Môžeme použiť Arrays.asList () vygenerovať ArrayList ktoré potom môžeme obtočiť pomocou pre každý() metóda:

Arrays.asList (DaysOfWeekEnum.values ​​()) .forEach (deň -> System.out.println (deň)); 

2.4. Iterovať pomocou EnumSet

EnumSet je špecializovaná implementácia množiny, s ktorou môžeme pracovať Enum typy:

EnumSet.allOf (DaysOfWeekEnum.class) .forEach (deň -> System.out.println (deň));

2.5. Pomocou ArrayList z Enum Hodnoty

Môžeme pridať aj hodnoty znaku Enum do a Zoznam. To nám umožňuje manipulovať s Zoznam ako každý iný:

Zoznam dní = nový ArrayList (); days.add (DaysOfWeekEnum.FRIDAY); days.add (DaysOfWeekEnum.SATURDAY); days.add (DaysOfWeekEnum.SUNDAY); pre (DaysOfWeekEnum deň: dni) {System.out.println (deň); } dni.odstrániť (DaysOfWeekEnum.SATURDAY); if (! days.contains (DaysOfWeekEnum.SATURDAY)) {System.out.println ("Sobota už nie je v zozname"); } pre (DaysOfWeekEnum deň: dni) {System.out.println (deň); } 

Môžeme tiež vytvoriť ArrayList používaním Arrays.asList ().

Ako však ArrayList je podporená Enum pole hodnot bude nemenný, takže z neho nemôžeme pridávať ani odstraňovať položky Zoznam. Odstránenie v nasledujúcom kóde by zlyhalo s UnsupportedOperationException:

Zoznam dní = Arrays.asList (DaysOfWeekEnum.values ​​()); dni.odstrániť (0); 

3. Záver

Videli sme rôzne spôsoby, ako iterovať cez Enum použitím pre každý,Prúda pre slučka v Jave. Ak potrebujeme vykonať akékoľvek paralelné operácie, Prúd by bola dobrá voľba.

Inak neexistuje nijaké obmedzenie, ktorú metódu použiť.

Ako vždy, kód všetkých tu vysvetlených príkladov nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found