Il foreach è un particolare costrutto (disponibile a partire da Java 5) che ci permette di iterare velocemente una struttura dati. In java possiamo usarlo sia su un array oppure su oggetti di tipo Iterable,cioè che dispongono di un iteratore (java.util.Iterator).
Le Collections di java (Linkedlist, ArrayList, etc.) sono tutti oggetti di tipo Iterable. Vediamo il costrutto generico:
for(type_var: arr) {
//ciclo
}
Supponiamo di creare un metodo che calcoli la somma di tutti gli elementi:
public static int somma(int [] array) {
int somma = 0;
for(int i = 0; i < array.length; i++) {
somma += array[i];
}
return somma;
}
Allo stesso modo con il costrutto foreach rende tutto puù chiaro e sintetico:
public static int somma(int [] array) {
int somma = 0;
for(int element:array)
somma+=element;
return somma;
}
L’ intero element sarà il nostro i-esimo elemento corrispondente al for visto sopra. Adesso vediamo un esempio per quanto riguarda gli oggetti Iterable. In questo caso il codice risulterà ancora più sintetico. Ad esempio se vogliamo iterare una LinkedList, abitualemente agiamo in questo modo:
LinkedList <String> lista = new LinkedList<String>();
lista.add("a");
lista.add("b");
....
Iterator <String> it = lista.iterator();
while(it.hasNext()) {
String str = it.next();
...
}
Mentre il costrutto foreach semplifica i riferimenti a livello di compilazione:
for(String str:lista) {
....
}
In questo caso str assumerà sequenzialmente il valore di ciascun elemento della lista.