Voyons comment écrire une liste itérative à l'aide d'une simple liste. Cette fois, nous utiliserons la liste de chaînes suivante.
list
final List<String> months =
Arrays.asList("January", "February", "March", "April", "May", "June", "July", "Augast", "September", "October", "November", "December");
Je veux juste que ces éléments soient une sortie standard en séquence.
Tout d'abord, utilisons la boucle for. La boucle for est un style impératif et est un itérateur externe. Le style impératif oblige le programmeur à réfléchir beaucoup à «comment» le faire.
Je ne pense pas que ce soit particulièrement difficile. Sorties dans l'ordre à partir du premier élément. Vous devez spécifier l'index en l'incrémentant un par un.
for-with-index
for (int i = 0; i < months.size(); i++) {
System.out.println(months.get(i));
}
Si vous n'avez pas besoin d'index, Java fournit une syntaxe de contrôle plus avancée qu'une simple boucle for. Dans les coulisses, l'interface Iterator est appliquée et les méthodes hasNext () et next () sont appelées. Par conséquent, il n'est pas nécessaire pour le programmeur de spécifier la fin de la boucle en utilisant la taille de la liste.
for-without-index
for (final String month : months) {
System.out.println(month);
}
Java8 a ajouté une méthode forEach à l'interface Iterable. C'est un style fonctionnel et un itérateur interne. Le style fonctionnel facilite la réflexion sur ce qu'il faut faire.
foreach-comsumer
months.forEach(new Consumer<String>() {
public void accept(final String month) {
System.out.println(month);
}
});
foreach-lambda
months.forEach((final String month) -> System.out.println(month));
Étant donné que le compilateur Java peut effectuer une inférence de type, il peut être omis comme suit. Cependant, dans ce cas, la finale est ratée et ce n'est plus un argument immuable.
foreach-lambda
months.forEach(month -> System.out.println(month));
Les références de méthode sont une fonctionnalité de Java8 et sont basées sur le nom de la classe :: nom de la méthode. Puisque la méthode déjà définie peut être exécutée sans spécifier l'argument, elle sera encore omise.
foreach-method-reference
months.forEach(System.out::println);