我在Java中有一个用于基数和中间方向的枚举:

public enum Direction {
   NORTH,
   NORTHEAST,
   EAST,
   SOUTHEAST,
   SOUTH,
   SOUTHWEST,
   WEST,
   NORTHWEST
}

我怎么能写一个循环,遍历每一个这些枚举值?


当前回答

枚举类型的所有常量都可以通过调用该类型的隐式公共静态T[] values()方法来获得:

 for (Direction d : Direction.values()) {
     System.out.println(d);
 }

其他回答

枚举类型的所有常量都可以通过调用该类型的隐式公共静态T[] values()方法来获得:

 for (Direction d : Direction.values()) {
     System.out.println(d);
 }

java 8中的更多方法:

使用EnumSet和forEach

EnumSet.allOf(Direction.class).forEach(...);

使用数组。asList with forEach

Arrays.asList(Direction.values()).forEach(...);

我们可以像这样使用一个过滤器(JAVA 8)。

Stream.of(Direction.values()).filter(name -> !name.toString().startsWith("S")).forEach(System.out::println);

. values ()

您可以在枚举上调用values()方法。

for (Direction dir : Direction.values()) {
  // do what you want
}

这个values()方法由编译器隐式声明。所以它没有列在Enum文档中。

你可以这样做:

for (Direction direction : EnumSet.allOf(Direction.class)) {
  // do stuff
}