Iteriranje preko enum vrijednosti u Javi

1. Pregled

Enum u Javi je tip podataka koji nam pomaže dodijeliti unaprijed definirani skup konstanti varijabli.

U ovom kratkom članku vidjet ćemo različite načine na koje možemo itirirati datoteku Enum na Javi.

2. Iteriranje preko Enum Vrijednosti

Prvo definirajmo Enum, tako da možemo stvoriti nekoliko jednostavnih primjera koda:

javni popis DaysOfWeekEnum {NEDJELJA, PONEDJELJAK, UTORAK, SRIJEDA, ČETVRTAK, PETAK, SUBOTA} 

Enumi nemaju metode za ponavljanje poput za svakoga() ili iterator (). Umjesto toga, možemo koristiti niz Enum vrijednosti koje je vratio vrijednosti () metoda.

2.1. Ponovite uporabu za petlju

Prvo, možemo jednostavno koristiti old-school za petlja:

za (DaysOfWeekEnum dan: DaysOfWeekEnum.values ​​()) {System.out.println (dan); }

2.2. Ponovno korištenje Stream

Možemo i koristiti java.util.Stream. Da bismo mogli izvoditi operacije na Enum vrijednosti.

Za stvaranje a Stream imamo dvije mogućnosti, jednu pomoću Stream.of:

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

Drugi, koristeći Nizovi.tok:

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

Pa, produžimo DaysOfWeekEnum klase za stvaranje primjera pomoću Stream:

javni popis DaysOfWeekEnum {NEDJELJA ("isključeno"), PONEDJELJAK ("radno"), UTORAK ("radno"), SRIJEDA ("radno"), ČETVRTAK ("radno"), PETAK ("radno"), SUBOTA ("isključeno" "); private String typeOfDay; DaysOfWeekEnum (String typeOfDay) {this.typeOfDay = typeOfDay; } // standardni getteri i postavljači public static Stream stream () {return Stream.Of (DaysOfWeekEnum.values ​​()); }}

Sada ćemo napisati primjer kako bismo ispisali neradne dane:

javna klasa EnumStreamExample {javna statička praznina main () {DaysOfWeekEnum.stream () .filter (d -> d.getTypeOfDay (). jednako ("isključeno")) .forEach (System.out :: println); }}

Izlaz koji dobijemo kada pokrenemo ovo:

NEDJELJA SUBOTA

2.3. Ponovno korištenje za svakoga()

The za svakoga() metoda dodana je u Iterativ sučelje u Javi 8. Dakle, sve klase java kolekcije imaju implementacije a za svakoga() metoda. Da bismo ih mogli koristiti s Enumom, prvo moramo pretvoriti Enum u prikladnu zbirku. Možemo koristiti Arrays.asList () za generiranje ArrayList koje zatim možemo petljati pomoću za svakoga() metoda:

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

2.4. Ponovno korištenje EnumSet

EnumSet je specijalizirana implementacija skupa s kojom možemo koristiti Enum vrste:

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

2.5. Korištenjem ArrayList od Enum Vrijednosti

Također možemo dodati vrijednosti Enum do a Popis. To nam omogućuje manipulaciju Popis kao i svaki drugi:

Popis dana = novi ArrayList (); days.add (DaysOfWeekEnum.FRIDAY); days.add (DaysOfWeekEnum.SUBOTA); days.add (DaysOfWeekEnum.SUNDAY); za (DaysOfWeekEnum dan: dana) {System.out.println (dan); } days.remove (DaysOfWeekEnum.SUBOTA); if (! days.contens (DaysOfWeekEnum.SATURDAY)) {System.out.println ("Subota više nije na popisu"); } za (DaysOfWeekEnum dan: dani) {System.out.println (dan); } 

Također možemo stvoriti ArrayList pomoću Arrays.asList ().

Međutim, kao ArrayList je podržan od Enum vrijednosti polja bit će nepromjenjiv, tako da ne možemo dodavati ili uklanjati stavke iz Popis. Uklanjanje u sljedećem kodu ne bi uspjelo s UnsupportedOperationException:

Popis dana = Arrays.asList (DaysOfWeekEnum.values ​​()); days.remove (0); 

3. Zaključak

Vidjeli smo razne načine za ponavljanje datoteke Enum koristeći za svakoga,Stream, i za petlja u Javi. Ako trebamo izvesti paralelne operacije, Stream bila bi dobra opcija.

Inače, nema ograničenja na koji način koristiti.

Kao i uvijek, kod za sve ovdje opisane primjere možete pronaći na GitHubu.