Un ciclo ‘for’ per scorrere su un enum in Java

Ho un enum in Java per le direzioni cardinali e intermedie:

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

Come posso scrivere un ciclo for che itera su ciascuno di questi valori enum ?

.values()

Puoi chiamare il metodo values() sul tuo enum.

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

Questo metodo values() è implicitamente dichiarato dal compilatore . Quindi non è elencato su Enum doc.

valori Enum # ():

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

Puoi farlo come segue:

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

Flussi

Prima di Java 8 è necessario stampare i valori usando per ciclo, come:

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

Ma in Java 8 possiamo anche fare uso di lambda e streams ( Tutorial ):

 Stream.of(Direction.values()).forEach(System.out::println); 
 for(Direction dir : Direction.values()) { } 

Se non ti interessa l’ordine questo dovrebbe funzionare:

 Set directions = EnumSet.allOf(Direction.class); for(Direction direction : directions) { // do stuff } 
  for (Direction d : Direction.values()) { //your code here } 

Ecco come eseguire iterazioni su Enum:

 private static void iterateEnumValues() { System.out.println("Iterating over Direction enum"); for(Direction direction : Direction.values()) { System.out.println("Enum = " + direction); } } 

Per saperne di più sulle operazioni comuni di Enum, controllare questo: Come usare Enums in java

Java8

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

da Java5 +

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

Prova ad usare un per ciascuno

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

Altri metodi in java 8:

Utilizzando EnumSet con forEach

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

Utilizzando Arrays.asList con forEach

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