et les deux obtiennent un paramètre Consumer. donc si Java 8, est destiné à éviter les confusions, comme il l'a fait dans Time API, pourquoi a-t-il ajouté une nouvelle confusion? ou est-ce que je manque un point?
Pour comprendre pourquoi les deux méthodes existent, vous devez d'abord comprendre ce que sont Iterator
et Iterable
.
Un Iterator
est fondamentalement quelque chose qui a un "élément suivant" et généralement une fin.
Un Iterable
est quelque chose qui contient des éléments dans une séquence finie ou infinie et peut donc être itéré en continuant à obtenir l'élément suivant. En d'autres termes, Iterable
s peut être itéré par Iterator
s.
Maintenant que vous comprenez cela, je peux parler de la différence entre les deux méthodes en question.
Prenons une liste de tableaux comme exemple. Voici ce qui se trouve dans la liste des tableaux:
[1, 3, 6, 8, 0]
Maintenant, si j'appelle Iterable.forEach()
et que je passe System.out::print()
, 13680
Sera imprimé. En effet, Iterable.forEach
Parcourt toute la séquence d'éléments.
D'un autre côté, si j'obtiens le Iterator
de la liste des tableaux et que j'appelle next
deux fois, avant d'appeler forEachRemaining
avec System.out::print()
, 680
sera imprimé. Le Iterator
a déjà parcouru les deux premiers éléments, donc les "restants" sont 6, 8 et 0.