Working with enums in Java 10 you have many options of creating and using enums. Which one to use depends on your needs:

More info on enums from Java docs:

create simple enum and get ordinal

The simple enum can be created in this way(there no change with previous versions):

public enum PopularLanguges {
    JAVA,
    JAVASCRIPT,
    PYTHON,
    SQL,
    C
}

and how to access it's information. Since the default constructor has ordinal information you can access it and use it if needed:

//access one element
System.out.println(PopularLanguges.PYTHON);

//access all
for (PopularLanguges lang : PopularLanguges.values()) {
    System.out.println("value: " + lang + "ordinal: " + lang.ordinal());
}

result:

PYTHON
ordinal: 0, value: JAVA
ordinal: 1, value: JAVASCRIPT
ordinal: 2, value: PYTHON
ordinal: 3, value: SQL
ordinal: 4, value: C

create enum with code field

You may want to define the key of the enum explicitly. You can use int, String or something else by adding instance field and overriding/ overloading the default contructor:

public enum FancyLanguges {
    GO(10),
    HASKELL(11),
    GROOVY(12),
    RUBY(13),
    COBOL(14);
    private int lang_id;
    FancyLanguges(int lang_id) {
        this.lang_id = lang_id;
    }
    public int lang_id() {
        return lang_id;
    }
}

and how to access it's information. Since the default constructor has ordinal information you can access it and use it if needed:

//access one element
System.out.println(FancyLanguges.GROOVY.lang_id());

//access all elements
for (FancyLanguges lang : FancyLanguges.values()) {
    System.out.println("ordinal: " + lang.ordinal() + ", key: " + lang.lang_id + ", value: " + lang);
}

result:

12
ordinal: 0, key: 10, value: GO
ordinal: 1, key: 11, value: HASKELL
ordinal: 2, key: 12, value: GROOVY
ordinal: 3, key: 13, value: RUBY
ordinal: 4, key: 14, value: COBOL

Iterate over enum by FOR loop

This is one of the oldest and very useful ways ot interation in Java. It's my prefereble way due to it's simplicity:

//simple enum
for (PopularLanguges lang : PopularLanguges.values()) {
    System.out.println("value: " + lang + "ordinal: " + lang.ordinal());
}

//enum with instance field
for (FancyLanguges lang : FancyLanguges.values()) {
    System.out.println("ordinal: " + lang.ordinal() + ", key: " + lang.lang_id + ", value: " + lang);
}

above you can see the results of it.

Iterate with EnumSet and forEach

Another simple and readable way is to use EnumSet and forEach:

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

it's the best way for iteration of enums in java 8 according to my personal experience.

Iterate enum with Stream

New way is looping over enum with Streams. You can do some extra operations like filtering the values of enum:

Before using stream you need to add stream method to your enum:

For example the simple enum would be

public enum PopularLanguges {
    JAVA,
    JAVASCRIPT,
    PYTHON,
    SQL,
    C;
    public static Stream<PopularLanguges> stream() {
        return Arrays.stream(PopularLanguges.values());
    }
}

And for the enum with instance field you need to add just this:

```java
public static Stream<FancyLanguges> stream() {
    return Arrays.stream(FancyLanguges.values());
}
//using stream to iterate over enum
PopularLanguges.stream().forEach(System.out::println);

//filtering elements of enum with Streams
FancyLanguges.stream()
                .filter(d -> d.lang_id() > 11)
                .forEach(System.out::println);

result:

JAVA
JAVASCRIPT
PYTHON
SQL
C

GROOVY
RUBY
COBOL

All examples and filter enum values

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

public class EnumTest {

    public static void main(String[] args) {

        //
        // Iterate over simple enum
        //
        for (PopularLanguges lang : PopularLanguges.values()) {
            System.out.println("ordinal: " + lang.ordinal()+ ", value: " + lang );
        }
        //
        // access simple enum
        //
        System.out.println(PopularLanguges.PYTHON);


        //
        // Iterate over complex enum
        //
        for (FancyLanguges lang : FancyLanguges.values()) {
            System.out.println("ordinal: " + lang.ordinal() + ", key: " + lang.lang_id + ", value: " + lang);
        }
        //
        // access complex enum
        //
        System.out.println(FancyLanguges.GROOVY.lang_id());

        //
        // iterate with streams
        //
        PopularLanguges.stream().forEach(System.out::println);
        FancyLanguges.stream()
                .filter(d -> d.lang_id() > 11)
                .forEach(System.out::println);

        //
        // iterate with EnumSet and forEach
        //
        EnumSet.allOf(PopularLanguges.class)
                .forEach(lang -> System.out.println(lang));

        EnumSet.allOf(FancyLanguges.class)
                .forEach(lang -> System.out.println(lang));
    }


    //
    // Simple enum
    //
    public enum PopularLanguges {
        JAVA,
        JAVASCRIPT,
        PYTHON,
        SQL,
        C;

        public static Stream<PopularLanguges> stream() {
            return Arrays.stream(PopularLanguges.values());
        }
    }

    public enum FancyLanguges {
        GO(10),
        HASKELL(11),
        GROOVY(12),
        RUBY(13),
        COBOL(14);

        private int lang_id;

        FancyLanguges(int lang_id) {
            this.lang_id = lang_id;
        }

        public int lang_id() {
            return lang_id;
        }

        public static Stream<FancyLanguges> stream() {
            return Arrays.stream(FancyLanguges.values());
        }
    }
}