Iterate over an Enum in Java

In this quick article, we’ll see different ways in which we can iterate over an enum in Java.
An enum type is a special data type that enables for a variable to be a set of predefined constants. The variable must be equal to one of the values that have been predefined for it. Common examples include compass directions (values of NORTH, SOUTH, EAST, and WEST) and the days of the week.
In this article, I would like to demonstrate 3 ways in which we can iterate over an enum in Java.
  1. Iterate Using forEach()
  2. Iterate Using for Loop
  3. Iterate Using java.util.Stream
Let's first create MonthEnum class then we will see how to iterate over this enum in Java.
package com.javaguides.corejava;

public enum MonthEnum {
    JANUARY,
    FEBRUARY,
    MARCH,
    APRIL,
    MAY,
    JUNE,
    JULY,
    AUGUST,
    SEPTEMBER,
    OCTOBER,
    NOVEMBER,
    DECEMBER;
}
Here is a complete program to demonstrate all three ways.
package com.javaguides.corejava;

import java.util.EnumSet;
import java.util.stream.Stream;

public class EnumIterationExample {
    public static void main(String[] args) {

        EnumIterationExample example = new EnumIterationExample();
        System.out.println("------------------ Using for loop -------------------");
        example.usingSimpleForLoop();

        System.out.println("------------------ Using forEach() -------------------");
        example.usingForEach();

        System.out.println("------------------ Using Stream() -------------------");
        example.usingStream();
    }

    // The static values() method of the java.lang.Enum class gives an array of enum values.
    public void usingSimpleForLoop() {
        for (MonthEnum monthEnum: MonthEnum.values()) {
            System.out.println(monthEnum.name());
        }
    }

    // Iterate using forEach()
    public void usingForEach() {
        EnumSet.allOf(MonthEnum.class).forEach(month - > System.out.println(month.name()));
    }

    // Iterate Using Stream
    public void usingStream() {
        Stream.of(MonthEnum.values()).forEach(System.out::println);
    }
}
Output:
------------------ Using for loop -------------------
JANUARY
FEBRUARY
MARCH
APRIL
MAY
JUNE
JULY
AUGUST
SEPTEMBER
OCTOBER
NOVEMBER
DECEMBER
------------------ Using forEach() -------------------
JANUARY
FEBRUARY
MARCH
APRIL
MAY
JUNE
JULY
AUGUST
SEPTEMBER
OCTOBER
NOVEMBER
DECEMBER
------------------ Using Stream() -------------------
JANUARY
FEBRUARY
MARCH
APRIL
MAY
JUNE
JULY
AUGUST
SEPTEMBER
OCTOBER
NOVEMBER
DECEMBER
Learn more about Enum at Enum Tutorial

Comments