Aufzählungswerte in Java durchlaufen

Iterieren über Enum Values ​​in Java

1. Überblick

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 in Java überEnum iterieren können.

2. Iterieren überEnum Werte

Definieren wir zunächst einEnum, damit wir einige einfache Codebeispiele erstellen können:

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

Aufzählungen haben keine Iterationsmethoden wieforEach() oderiterator(). Stattdessen können wir das Array derEnum-Werte verwenden, die von dervalues()-Methode zurückgegeben werden.

2.1. Iterieren mit for-Schleife

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

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

2.2. Iterieren Sie mitStream

Wir können auchjava.util.Stream verwenden. Damit können wir Operationen mit denEnum-Werten ausführen.

Um einStream zu erstellen, haben wir zwei Möglichkeiten, eine mitStream.of:

Stream.of(DaysOfWeekEnum.values());

Ein anderer, derArrays.stream verwendet:

Arrays.stream(DaysOfWeekEnum.values());

Erweitern wir also die KlasseDaysOfWeekEnum, um ein Beispiel mitStream 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());
    }
}

Nun schreiben wir ein Beispiel, 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 erhalten wir, wenn wir dies ausführen:

SUNDAY
SATURDAY

2.3. Iterieren Sie mitforEach()

Die MethodeforEach() wurde der SchnittstelleIterable in Java 8 hinzugefügt. Alle Java-Auflistungsklassen haben also Implementierungen einerforEach()-Methode. Um diese mit einer Enum zu verwenden, müssen wir zuerst die Enum in eine geeignete Sammlung konvertieren. Wir könnenArrays.asList() verwenden, umArrayList zu generieren, die wir dann mit der MethodeforEach() durchlaufen können:

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

2.4. Iterieren Sie mitEnumSet

EnumSet ist eine spezielle Mengenimplementierung, die wir mitEnum Typen verwenden können:

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

2.5. Verwenden vonArrayList vonEnum Werten

Wir können auch Werte vonEnum zuList hinzufügen. Dies ermöglicht es uns, dieListwie alle anderen 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 auchArrayList erstellen, indem wirArrays.asList() verwenden.

DaArrayList jedoch durch das Werte-ArrayEnum unterstützt wird, ist es unveränderlich, sodass wir keine Elemente zuList. hinzufügen oder daraus entfernen können. Das Entfernen im folgenden Code würde mit fehlschlagen anUnsupportedOperationException:

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

3. Fazit

Wir haben verschiedene Möglichkeiten gesehen, um überEnum mitforEach,Stream undfor Schleife in Java zu iterieren. Wenn wir parallele Operationen ausführen müssen, wäreStream eine gute Option.

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

Wie immer ist der Code für alle hier erläuterten Beispieleover on GitHub.