web-dev-qa-db-fra.com

quel est l'intérêt d'avoir à la fois Iterator.forEachRemaining () et Iterable.forEach ()?

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?

14
mostafa.S

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, Iterables peut être itéré par Iterators.

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.

54
Sweeper