Itereren over Enum-waarden in Java

1. Overzicht

Enum in Java is een datatype waarmee we een vooraf gedefinieerde set constanten aan een variabele kunnen toewijzen.

In dit korte artikel zullen we verschillende manieren zien waarop we een Enum in Java.

2. Itereren Enum Waarden

Laten we eerst een Enum, zodat we enkele eenvoudige codevoorbeelden kunnen maken:

openbare lijst DaysOfWeekEnum {ZONDAG, MAANDAG, DINSDAG, WOENSDAG, DONDERDAG, VRIJDAG, ZATERDAG} 

Enums hebben geen methoden voor iteratie zoals voor elke () of iterator (). In plaats daarvan kunnen we de array van de Enum waarden geretourneerd door de waarden () methode.

2.1. Herhaal het gebruik van for Loop

Ten eerste kunnen we gewoon de old-school gebruiken voor lus:

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

2.2. Herhaal het gebruik Stroom

We kunnen ook gebruik maken van java.util.Stream. Zodat we bewerkingen kunnen uitvoeren op het Enum waarden.

Om een Stroom we hebben twee opties, een met Stroom van:

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

Een ander, met behulp van Arrays.stream:

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

Dus laten we het DaysOfWeekEnum class om een ​​voorbeeld te maken met behulp van Stroom:

openbare opsomming DaysOfWeekEnum {SUNDAY ("off"), MONDAY ("working"), DINSDAG ("working"), WOENSDAG ("working"), THURSDAY ("working"), FRIDAY ("working"), SATURDAY ("off "); private String typeOfDay; DaysOfWeekEnum (String typeOfDay) {this.typeOfDay = typeOfDay; } // standaard getters en setters openbare statische Stream stream () {return Stream.Of (DaysOfWeekEnum.values ​​()); }}

Nu zullen we een voorbeeld schrijven om de niet-werkdagen af ​​te drukken:

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

De output die we krijgen als we dit uitvoeren:

ZONDAG ZATERDAG

2.3. Herhaal het gebruik voor elke ()

De voor elke () methode is toegevoegd aan de Herhaalbaar interface in Java 8. Alle Java-verzamelingsklassen hebben dus implementaties van een voor elke () methode. Om deze met een Enum te kunnen gebruiken, moeten we eerst de Enum naar een geschikte verzameling converteren. We kunnen gebruiken Arrays.asList () om een ArrayList die we vervolgens kunnen herhalen met behulp van de voor elke () methode:

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

2.4. Herhaal het gebruik EnumSet

EnumSet is een gespecialiseerde set-implementatie waarmee we kunnen gebruiken Enum types:

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

2.5. Met behulp van een ArrayList van Enum Waarden

We kunnen ook waarden toevoegen van een Enum naar een Lijst. Hierdoor kunnen we de Lijst zoals elk ander:

Lijstdagen = nieuwe ArrayList (); days.add (DaysOfWeekEnum.FRIDAY); days.add (DaysOfWeekEnum.SATURDAY); days.add (DaysOfWeekEnum.SUNDAY); voor (DaysOfWeekEnum dag: dagen) {System.out.println (dag); } days.remove (DaysOfWeekEnum.SATURDAY); if (! days.contains (DaysOfWeekEnum.SATURDAY)) {System.out.println ("Zaterdag staat niet langer in de lijst"); } voor (DaysOfWeekEnum dag: dagen) {System.out.println (dag); } 

We kunnen ook een ArrayList door het gebruiken van Arrays.asList ().

Echter, zoals de ArrayList wordt ondersteund door de Enum waarden array zal het onveranderlijk zijn, dus we kunnen geen items toevoegen aan of verwijderen uit de Lijst. Het verwijderen in de volgende code zou mislukken met een UnsupportedOperationException:

Lijstdagen = Arrays.asList (DaysOfWeekEnum.values ​​()); dagen.verwijderen (0); 

3. Conclusie

We hebben verschillende manieren gezien om een Enum gebruik makend van voor elk,Stroom, en voor lus in Java. Als we parallelle bewerkingen moeten uitvoeren, Stroom zou een goede optie zijn.

Anders is er geen beperking op de te gebruiken methode.

Zoals altijd is de code voor alle voorbeelden die hier worden uitgelegd, te vinden op GitHub.