Implementing Iterable interface in Java to enable for-each loop based iteration by InfocampusTypical for-each construct usagefor(MyClass myClassObject: list){ //code to use myClassObject}Where list is an instance of java.util.List.Most of the important in-built collection types now support iteration using the enhanced for-each loop. This is by virtue of their implementing the interface Iterable. In fact, any class which implements Iterable, can be used in a for-each loop to iterate over the objects of type T which it holds or encapsulates. Extending this logic to the small code snippet we saw above MyCollection which implements Iterable, can be used in a for-each loop to iterate through MyClass objects stored in it.Having understood the relationship between implementing Iterable interface and use of the implementing class in for-each loop, let us now understand how to go about implementing Iterable.How to implement Iterable interfaceAny class implementing Iterable needs to follow three simple steps 1.Implement Iterable interface.2.Override Iterables iterator() method.3.Return an instance of Iterator from the iterator() method.So, if you have an API/Class containing a collection of String type of elements, and you want clients of this API to be able to access theString objects using a for-each loop, then your three steps of implementing Iterable would go like this 1.Implement Iterable.2.Override Iterables iterator() method.3.Return an instance of Iterator from the iterator() method.Simple, right! There is a small piece of logic missing though!!How do you get hold of an Iterator instance pointing to your stored collection?The general practice in this case is to return the in-built Iterator instance of the collection class you use to store the iterable objects in your API. So, if you use a List to store the String objects to be iterated, then you return Iterator returned by List.iterator() method as the output of overridden Iterable.iterator() method.Let us see a Java code example to see how Iterable implementation can be done.Java code example showing Iterable implementationLets take a simple case of aggregation to show an Iterable implementation in action. For our example scenario we have 2 types Department and Employee. A Department instance holds multiple Employee instances in a employee list, or List. We will make Department class implement the Iterable interface. Doing so would would allow us to iterate through employees of a department using the for-each loop just by getting hold of a Department instance. Let us see the code in action now, which will be followed by detailed explanation of the code.Java code example showing Iterable implementation//Employee.java(POJO)package com.javabrahman.corejava;public class Employee { private String name; private Integer age; public Employee(String name, Integer age) { this.name = name; this.age = age; } //setters and getters for name & age go here //standard override of equals() & hashcode() methods goes here}//IterableDepartment.java which implements Iterablepackage com.javabrahman.corejava;import java.util.List;import java.util.Iterator;public class IterableDepartment implements Iterable { List employeeList; public IterableDepartment(List employeeList){ this.employeeList=employeeList; } @Override public Iterator iterator() { return employeeList.iterator(); }}//Client class IterableDeptClient.java//Iterates through IterableDepartment’s employees using for-each looppackage com.javabrahman.corejava;import java.util.Arrays;import java.util.List;public class IterableDeptClient { public static void main(String args[]){ List employeeList = Arrays.asList(new Employee(“Tom Jones”, 45), new Employee(“Harry Jones”, 42), new Employee(“Ethan Hardy”, 65), new Employee(“Nancy Smith”, 22), new Employee(“Deborah Sprightly”, 29)); IterableDepartment iterableDepartment=new IterableDepartment(employeeList); for(Employee emp: iterableDepartment){ System.out.println(emp.getName()); } }}OUTPUT of the above codeTom JonesHarry JonesEthan HardyNancy SmithDeborah SprightExplanation of the codeEmployee.java is the POJO class in this example. It has only 2 attributes name & age.IterableDepartment class contains a List attribute named employeeList which is initialized using IterableDepartments only public constructor.IterableDeptClient first creates an employee list consisting of 5 employees, and then passes this employee list to the constructor of the new IterableDepartment instance it creates.Then it iterates through the Employee objects in the IterableDepartment instance using a for-each loop.In each iteration of the for-each loop, name of the employee encountered is printed. As expected, the for-each loop correctly iterates through the 5 Employee objects stored in the IterableDepartment instance, and prints their names.SummaryIn the above tutorial we understood how Iterable interface can be implemented on a class holding a collection of objects. We then saw with a Java code example showing how such a collection can be iterated through using the enhanced for-each loop.Infocampus Bangalore offers java training in bangalore. Best java training in Bangalore. We also provide java certification training path for our students in Bangalore.on day time classes, end of the week instructional courses, evening group classes and quick track instructional courses. Contact 9738001024 to know substantially more points of interest on java preparing. Visit http://infocampus.co.in/java-training-bangalore.htmlArticle Source: eArticlesOnline.com
[youtube]http://www.youtube.com/watch?v=pm7FyShb7Bk[/youtube]