Iterering over enumværdier i Java

1. Oversigt

Enum i Java er en datatype, der hjælper os med at tildele et foruddefineret sæt konstanter til en variabel.

I denne hurtige artikel vil vi se forskellige måder, hvorpå vi kan gentage over en Enum i Java.

2. Iterering over Enum Værdier

Lad os først definere en Enum, så vi kan oprette nogle enkle kodeeksempler:

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

Enums har ikke metoder til iteration som for hver() eller iterator (). I stedet kan vi bruge arrayet af Enum værdier returneret af værdier () metode.

2.1. Iterate Using for Loop

For det første kan vi bare bruge den gamle skole til løkke:

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

2.2. Iterat brug Strøm

Vi kan også bruge java.util.Stream. Så vi kan udføre operationer på Enum værdier.

At oprette en Strøm vi har to muligheder, den ene bruger Stream.of:

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

En anden bruger Arrays.stream:

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

Så lad os udvide DaysOfWeekEnum klasse for at oprette et eksempel ved hjælp af 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 og setter offentlig statisk Stream stream () {return Stream.Of (DaysOfWeekEnum.values ​​()); }}

Nu skriver vi et eksempel for at udskrive de ikke-arbejdsdage:

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

Det output, vi får, når vi kører dette:

SØNDAG LØRDAG

2.3. Iterat brug for hver()

Det for hver() metoden blev føjet til Iterabel interface i Java 8. Så alle java-samlingsklasser har implementeringer af en for hver() metode. For at bruge disse med en Enum er vi først nødt til at konvertere Enum til en passende samling. Vi kan bruge Arrays.asList () at generere en ArrayList som vi derefter kan løkke rundt ved hjælp af for hver() metode:

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

2.4. Iterat brug EnumSet

EnumSet er en specialiseret sætimplementering, som vi kan bruge med Enum typer:

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

2.5. Brug af en ArrayList af Enum Værdier

Vi kan også tilføje værdier af en Enum til en Liste. Dette giver os mulighed for at manipulere Liste som enhver anden:

Listedage = ny ArrayList (); dage.add (DaysOfWeekEnum.FRIDAY); dage.add (DaysOfWeekEnum.SATURDAY); dage.add (DaysOfWeekEnum.SUNDAY); for (DaysOfWeekEnum dag: dage) {System.out.println (dag); } dage.remove (DaysOfWeekEnum.SATURDAY); if (! days.contains (DaysOfWeekEnum.SATURDAY)) {System.out.println ("Lørdag er ikke længere på listen"); } for (DaysOfWeekEnum dag: dage) {System.out.println (dag); } 

Vi kan også oprette en ArrayList ved hjælp af Arrays.asList ().

Men som den ArrayList er bakket op af Enum værdier array det vil være uforanderligt, så vi kan ikke tilføje eller fjerne elementer fra Liste. Fjernelsen i følgende kode mislykkes med en Ikke-understøttetOperationException:

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

3. Konklusion

Vi så forskellige måder at gentage over en Enum ved brug af for hver,Strømog til loop i Java. Hvis vi har brug for at udføre parallelle operationer, Strøm ville være en god mulighed.

Ellers er der ingen begrænsninger for, hvilken metode der skal bruges.

Som altid kan koden til alle eksemplerne, der er forklaret her, findes på GitHub.