Iterieren über Enum-Werte in Java

1. Übersicht

Enum in Java ist ein Datentyp, mit dem wir einer Variablen einen vordefinierten Satz von Konstanten zuweisen können.

In diesem kurzen Artikel sehen wir verschiedene Möglichkeiten, wie wir eine Aufzählung in Java durchlaufen können .

2. Iterieren über Enum- Werte

Definieren wir zunächst eine Aufzählung , damit wir einige einfache Codebeispiele erstellen können:

public enum DaysOfWeekEnum { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } 

Aufzählungen haben keine Iterationsmethoden wie forEach () oder iterator () . Stattdessen können wir das Array der Enum- Werte verwenden, die von der values ​​() -Methode zurückgegeben werden.

2.1. Iterieren mit for-Schleife

Erstens können wir einfach die for- Schleife der alten Schule verwenden :

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

2.2. Mit Stream iterieren

Wir können auch java.util.Stream verwenden . Damit können wir Operationen an den Enum- Werten ausführen .

Um einen Stream zu erstellen , haben wir zwei Möglichkeiten, eine mit Stream.of :

Stream.of(DaysOfWeekEnum.values());

Eine andere, die Arrays.stream verwendet :

Arrays.stream(DaysOfWeekEnum.values());

Erweitern wir also die DaysOfWeekEnum- Klasse, um ein Beispiel mit Stream zu erstellen :

public enum DaysOfWeekEnum { SUNDAY("off"), MONDAY("working"), TUESDAY("working"), WEDNESDAY("working"), THURSDAY("working"), FRIDAY("working"), SATURDAY("off"); private String typeOfDay; DaysOfWeekEnum(String typeOfDay) { this.typeOfDay = typeOfDay; } // standard getters and setters public static Stream stream() { return Stream.Of(DaysOfWeekEnum.values()); } }

Jetzt werden wir ein Beispiel schreiben, um die arbeitsfreien Tage auszudrucken:

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

Die Ausgabe, die wir erhalten, wenn wir dies ausführen:

SUNDAY SATURDAY

2.3. Iterieren mit forEach ()

Die forEach () -Methode wurde der Iterable- Schnittstelle in Java 8 hinzugefügt . Daher verfügen alle Java-Auflistungsklassen über Implementierungen einer forEach () -Methode. Um diese mit einer Aufzählung zu verwenden, müssen wir zuerst die Aufzählung in eine geeignete Sammlung konvertieren. Wir können Arrays.asList () verwenden , um eine ArrayList zu generieren, die wir dann mit der forEach () -Methode durchlaufen können :

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

2.4. Mit EnumSet iterieren

EnumSet ist eine spezielle Set-Implementierung, die wir mit Enum- Typen verwenden können:

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

2.5. Verwenden einer ArrayList von Enum- Werten

Wir können auch Werte eines hinzufügen Enum in eine Liste . Dies ermöglicht es uns, die Liste wie jede andere zu manipulieren :

List days = new ArrayList(); days.add(DaysOfWeekEnum.FRIDAY); days.add(DaysOfWeekEnum.SATURDAY); days.add(DaysOfWeekEnum.SUNDAY); for (DaysOfWeekEnum day : days) { System.out.println(day); } days.remove(DaysOfWeekEnum.SATURDAY); if (!days.contains(DaysOfWeekEnum.SATURDAY)) { System.out.println("Saturday is no longer in the list"); } for (DaysOfWeekEnum day : days) { System.out.println(day); } 

Wir können eine ArrayList auch mithilfe von Arrays.asList () erstellen .

Da die ArrayList jedoch durch das Enum- Werte-Array unterstützt wird, ist sie unveränderlich, sodass wir keine Elemente zur Liste hinzufügen oder daraus entfernen können . Das Entfernen im folgenden Code würde mit einer UnsupportedOperationException fehlschlagen :

List days = Arrays.asList(DaysOfWeekEnum.values()); days.remove(0); 

3. Fazit

Wir haben verschiedene Möglichkeiten gesehen, eine Aufzählung mit forEach, Stream und for- Schleife in Java zu durchlaufen . Wenn wir parallele Operationen ausführen müssen, wäre Stream eine gute Option.

Andernfalls gibt es keine Einschränkung für die zu verwendende Methode.

Wie immer finden Sie den Code für alle hier erläuterten Beispiele auf GitHub.