Iterating enum of enums

enums, java

Solution

Unfortunately, you can't group enums like this. The enum `Birds` is distinct from the `Birds` value inside the `fauna` enum. The usual way to do it is to add a field which is also an enum:

enum Fauna {
    enum Type { MAMMAL, BIRD }

    TIGER(Type.MAMMAL), 
    LION(Type.MAMMAL), 
    PEACOCK(Type.BIRD), 
    OWL(Type.BIRD);

    private final Type type;

    Fauna(Type type) { this.type = type; }

}

If you only want the animals of a specific type, for example all `BIRD`s, you will unfortunately have to write a helper method to do that, iterating over all the `Fauna` values and picking those of the correct type. (Unless you're running Java 8, in which case it's just `Stream.of(Fauna.values()).filter(f -> f.type == BIRD).toList()` or something similar).

Problem

I have a structure some-thing like ``` public class EnumTest{ enum fauna { Animals, Birds; enum Animals { Tiger("tiger"), Lion("lion"); String name; Animals(String name) { this.name = name; } } enum Birds { Peacock("peacock"), owl("Owl"); String name; Birds(String name) { this.name = name; } } } } ``` Now I couldn't find a way to iterate over the enum fauna to print the names of enum animals and birds. Is there any way to do it??

Original source