Iterere over Enum-verdier i Java

1. Oversikt

Enum i Java er en datatype som hjelper oss med å tilordne et forhåndsdefinert sett med konstanter til en variabel.

I denne raske artikkelen ser vi forskjellige måter vi kan gjenta over en Enum i Java.

2. Iterere over Enum Verdier

La oss først definere en Enum, slik at vi kan lage noen enkle kodeeksempler:

offentlig enum DaysOfWeekEnum {SØNDAG, MANDAG, TIRSDAG, ONSDAG, TORSDAG, FREDAG, LØRDAG} 

Enums har ikke metoder for iterasjon som for hver() eller iterator (). I stedet kan vi bruke matrisen til Enum verdier returnert av verdier () metode.

2.1. Iterate Using for Loop

For det første kan vi bare bruke den gamle skolen til Løkke:

for (DaysOfWeekEnum dag: DaysOfWeekEnum.values ​​()) {System.out.println (dag); }

2.2. Iterere bruk Strøm

Vi kan også bruke java.util.Stream. Slik at vi kan utføre operasjoner på Enum verdier.

Å lage en Strøm vi har to alternativer, en bruker Stream.of:

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

En annen, bruker Arrays.stream:

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

Så la oss utvide DaysOfWeekEnum klasse for å lage et eksempel ved hjelp av Strøm:

public enum DaysOfWeekEnum {SUNDAY ("off"), MONDAY ("working"), TUESDAY ("working"), ONSDAY ("working"), THURSDAY ("working"), FRIDAY ("working"), Lørdag ("off "); privat streng typeOfDay; DaysOfWeekEnum (streng typeOfDay) {this.typeOfDay = typeOfDay; } // standard getters and setters public static Stream stream () {return Stream.Of (DaysOfWeekEnum.values ​​()); }}

Nå skal vi skrive et eksempel for å skrive ut ikke-virkedager:

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

Resultatet vi får når vi kjører dette:

SØNDAG LØRDAG

2.3. Iterere bruk for hver()

De for hver() metoden ble lagt til Iterabel grensesnitt i Java 8. Så alle Java-samlingsklassene har implementeringer av en for hver() metode. For å kunne bruke disse sammen med en Enum, må vi først konvertere Enum til en passende samling. Vi kan bruke Arrays.asList () å generere en ArrayList som vi deretter kan løkke rundt ved hjelp av for hver() metode:

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

2.4. Iterere bruk EnumSet

EnumSet er en spesialisert settimplementering som vi kan bruke med Enum typer:

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

2.5. Bruke en ArrayList av Enum Verdier

Vi kan også legge til verdier av en Enum til en Liste. Dette lar oss manipulere Liste som alle andre:

Listedager = ny ArrayList (); dager.add (DaysOfWeekEnum.FRIDAY); dager.add (DaysOfWeekEnum.SATURDAY); dager.add (DaysOfWeekEnum.SUNDAY); for (DaysOfWeekEnum dag: dager) {System.out.println (dag); } dager. fjern (DaysOfWeekEnum.SATURDAY); if (! days.contains (DaysOfWeekEnum.SATURDAY)) {System.out.println ("Lørdag er ikke lenger i listen"); } for (DaysOfWeekEnum dag: dager) {System.out.println (dag); } 

Vi kan også lage en ArrayList ved bruk av Arrays.asList ().

Imidlertid, som ArrayList støttes av Enum verdier array det vil være uforanderlig, så vi kan ikke legge til eller fjerne elementer fra Liste. Fjernelsen i følgende kode mislykkes med en Ikke-støttetOperationException:

Liste dager = Arrays.asList (DaysOfWeekEnum.values ​​()); dager. fjern (0); 

3. Konklusjon

Vi så forskjellige måter å gjenta over en Enum ved hjelp av for hver,Strøm, og til loop i Java. Hvis vi trenger å utføre parallelle operasjoner, Strøm ville være et godt alternativ.

Ellers er det ingen begrensning på hvilken metode du skal bruke.

Som alltid kan koden for alle eksemplene som er forklart her, finnes på GitHub.


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