一个’for’循环迭代Java中的枚举

A 'for' loop to iterate over an enum in Java

我在Java中有一个EDCOX1,0,用于基本方向和中间方向:

1
2
3
4
5
6
7
8
9
10
public enum Direction {
   NORTH,
   NORTHEAST,
   EAST,
   SOUTHEAST,
   SOUTH,
   SOUTHWEST,
   WEST,
   NORTHWEST
}

我如何编写一个循环来遍历这些enum值?


.values()

你可以叫EDOCX1。

ZZU1

该方法由编译器默示宣布。因此,它没有在Enum上列出。


Enum 355;values():

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


你可以这样做:

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


流Prior to Java 8

1
2
3
for (Direction dir : Direction.values()) {
            System.out.println(dir);
}

爪哇8

我们还可以利用Lambda和Streams(教学):

1
Stream.of(Direction.values()).forEachOrdered(System.out::println);

为什么流浪的人没有爱德华?

明确无误地指出,如果流水有一个明确的油墨顺序,则为这条流的每一个元素在河口的油墨顺序中采取行动。不保证秩序会被打破。

同时,当与流浪(特别是平行的)一起工作时,思考流浪的本质。As per the doc:

如果流水线操作的行为参数是静态的,则流水线的结果可能是不确定或不正确的。一个稳态的兰巴达是一个在执行流水线期间可能发生变化的任何状态的结果。

1
2
Set<Integer> seen = Collections.synchronizedSet(new HashSet<>());
stream.parallel().map(e -> { if (seen.add(e)) return 0; else return e; })...

在这里,如果映射操作是并行的,那么同样的输入结果也可以从运行到运行,因为通过调度的不同,当一个无条件的兰卜达表示结果时,它们总是相同的。

一般而言,行为参数对流量操作的侧面影响是讨论的问题,因为这些参数通常会引导不受情势所要求的违反行为的影响,以及其他威胁安全危险的情况。

Streams may or may not have a defined encounter order.在水流或非水流在来源和中间操作上都有一个密集的顺序。


1
2
3
4
for(Direction dir : Direction.values())
{

}

如果你不在乎订单

1
2
3
4
Set<Direction> directions = EnumSet.allOf(Direction.class);
for(Direction direction : directions) {
    // do stuff
}


1
2
3
    for (Direction  d : Direction.values()) {
       //your code here  
    }

尝试为每一个人使用

1
2
3
for ( Direction direction : Direction.values()){
  System.out.println(direction.toString());
}

Java8

1
Stream.of(Direction.values()).forEach(System.out::println);

From Java5+

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


More methods in Java 8:

使用EnumSetforEach

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

使用Arrays.asListforEach

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