Java 8 External Iterator vs Internal Iterator
External Iterators Definition(or Active Iterators) – With external iterators responsibility of iterating over the elements, and making sure that this iteration takes into account the total number of records, whether more records exist to be iterated and so on lies with the programmer
When you get an iterator and step over it, that is an external iterator
Internal Iterators(or Passive Iterators) – Internal Iterators manage the iterations in the background. This leaves the programmer to just declaratively code what is meant to be done with the elements of the Collection, rather than managing the iteration and making sure that all the elements are processed one-by-one.
Lets see how simple it is to say print all elements in an ArrayList in Java 8 using an example of internal iterator based forEach loop –
In the above code, we are just telling the forEach method what to do(i.e. print) with each String in the namesList list using a lambda expression.All the work of iterating over the list of names one by one and printing them is taken care of internally by the runtime, leaving us with just declaratively defining only what is to be done i.e. print the names.
Advantage of internal iterators over external iterators
- Improved code readability as its declarative in nature
- Concise code as multiple lines of code for external iterators is reduced to just one or two lines of code in case of internal iterators
- Simplified implementation/less defects as code written by programmer is very less, chances of bugs creeping into the iteration logic are not there.