In this article, we will understand Iterable interface in java, its meaning, use and methods with example
Iterable interface resides in java.lang
package and was added in java 1.5. This interface is only applicable to collection of items such as array, list, map, queue etc., which can be iterated.
Any collection that implements this interface indicates that it can be iterated or you can loop over its elements.
An object that implements
Iterable
can be iterated in following ways.1. Using iterator()
Iterable
interface has an iterator()
method which returns an object of java.util.Iterator interface.This object can then be used for looping over elements of a collection using its
hasNext()
and next()
methods.Example,
// create arraylist ArrayList<String> list = new ArrayList<>(); // add elements list.add("Google"); list.add("Facebook"); list.add("Amazon"); list.add("Youtube"); // get iterator Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); }
java.util.ArrayList
extends List
interface which extends Collection
interface.
Collection
, in turn, extends Iterable
. Thus, we can invoke iterator()
method on an arraylist.
This iterator is used to loop over the elements of arraylist.
Output of above program is
Google
Facebook
Amazon
Youtube
2. Using enhanced for loop
A collection that implements java.lang.Iterable
can also be iterated using enhanced for loop. Example,
ArrayList<String> list = new ArrayList<>(); list.add("Google"); list.add("Facebook"); list.add("Amazon"); list.add("Youtube"); // enhanced for loop for(String item:list) { System.out.println(item); }
With enhanced for loop, the type of loop variable must be same as the type of the elements of collection, which is, String in this case.
Output is
Google
Facebook
Amazon
Youtube
Java 8 introduced a
forEach()
method to java.lang.Iterable
interface, which iterates over the elements of a collection.forEach is a default interface method which accepts an argument of type
java.util.function.Consumer
as argument.Consumer
is a functional interface, which means that you can supply a Lambda expression to forEach()
. Example,
ArrayList<String> list = new ArrayList<>(); list.add("Google"); list.add("Facebook"); list.add("Amazon"); list.add("Youtube"); list.forEach(item -> { System.out.println(item); });
This prints
Google
Facebook
Amazon
Youtube
Iterable methods
Following are important methods defined in Iterable interface.
1. iterator()
This method returns an object of Java iterator and is used to loop over the elements of the collection. Example of this method is given above.
2. forEach()
forEach()
is a default method added to Iterable in java 8. It accepts a lambda expression as argument.
This lambda expression has a single argument and is invoked for each element of the collection.
Lambda function argument contains the value of current collection element in each iteration.
3. splitIterator()
This method is a default interface method added in java 8 and returns an object of java.util.SplitIterator
.
SplitIterator
is used to iterate and partition the elements of a collection. It is usually used in parallel operations.
java.lang.Iterable
interface is generic, meaning that can be defined for different object types as can be seen from its definition below.
public interface Iterable<T> { }
where T is the generic type.
So, for a collection of different types, the type of iterator will be different. Example,
List<String> names = new ArrayList<>(); // iterator of type String Iterator<String> nameIterator = names.iterator(); List<Integer> numbers = new ArrayList<>(); // iterator of type Integer Iterator<Integer> numberIterator = numbers.iterator(); List<Dog> dogs = new ArrayList<>(); // iterator of type Dog Iterator<Dog> dogIterator = dogs.iterator();
That is all on Iterable interface in java. Hit the clap if the article was useful.