迭代枚举枚举

时间:2013-12-16 07:37:22

标签: java enums

我有一个像

这样的结构
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; 
              }
         }
     }
}

现在我找不到一种方法来迭代enum动物群来打印枚举动物和鸟类的名字。有办法吗?

5 个答案:

答案 0 :(得分:9)

不幸的是,你不能对这样的枚举进行分组。枚举BirdsBirds枚举中的fauna值不同。通常的方法是添加一个也是枚举的字段:

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; }

}

如果您只想要特定类型的动物,例如所有BIRD s,那么您将不得不编写辅助方法来执行此操作,迭代所有Fauna值并选择那些正确的类型。 (除非你运行Java 8,在这种情况下它只是Stream.of(Fauna.values()).filter(f -> f.type == BIRD).toList()或类似的东西)。

答案 1 :(得分:0)

试试这个。不太确定这是你想要的。

public static void main(String[] args) {
    EnumTest.fauna[] values = EnumTest.fauna.values();
    for (int i = 0; i < values.length; i++) {
        System.out.println(values[i]);
    }
}

答案 2 :(得分:0)

你应该能够直接访问枚举,

for(Animals an:Animals.values()){
        System.out.println(an.name);
    }

答案 3 :(得分:0)

如果你在枚举中有大的树状结构,你应该考虑使用复合模式。

答案 4 :(得分:0)

试试这个

interface Creature {
    String getName();
}

enum fauna {
    Animals(Animals.class), Birds(Birds.class);
    Class<Creature> i;
    fauna(Class i) {
        this.i = i;
    }

    enum Animals implements Creature {
        Tiger("tiger"), Lion("lion");
        String name;
        Animals(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
    }

    enum Birds implements Creature {
        Peacock("peacock"), owl("Owl");
        String name;
        Birds(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
    }
}

public static void main(String[] args) throws Exception {
    for(fauna e : fauna.values()) {
        for(Creature x : e.i.getEnumConstants()) {
            System.out.print(x.getName() + " ");
        }
    }
}

输出

tiger lion peacock Owl