Generic For Loop in Java

When we know that we have to iterate over a whole set or list, then we can use Generic For Loop. Java’s Generic has a new loop called for-each loop. It is also called enhanced for loop. This for-each loop makes it easier to iterate over array or generic Collection classes.
In normal for loop, we write three statements :
for( statement1; statement 2; statement3 )
{
     //code to be executed 
}
Statement 1 is executed before the execution of code, Statement 2 states the condition to be satisfied to execute the code and Statement 3 gets executed after the execution of the code block.
But if we look into the Generic For loop or for-each loop,
The generic for loop consists of three parameters :
- Iterator function: It gets called when the next value is needed. It receives both the invariant state and control variable as parameters. Returns nil signals for termination.
 - Invariant state: This doesn’t change during the iteration. It is basically the subject of the iteration such as String, table or user data.
 - Control variable: It represents the initial value of the iteration.
 
Syntax
for( ObjectType variable : iterable/array/collections ){
     // code using name variable
}
Equivalent to
for( int i=0 ; i< list.size() ; i++) {
   ObjectType variable = list.get(i);
   // statements using variable
}
Example:
Java
// Java program to illustrate Generic for loop  import java.io.*;  class GenericsForLoopExample {        public static void main(String[] args)    {        // create an array        int arr[] = { 120, 100, 34, 50, 75 };          // get the sum of array elements        int s = sum(arr);          // print the sum        System.out.println(s);    }      // returns the sum of array elements    public static int sum(int arr[])    {          // initialize the sum variable        int sum = 0;          // generic for loop where var stores the integer        // value stored at every index of array        for (int var : arr) {            sum += var;        }          return sum;    }} | 
379
Example: Showing that
Java
// Java program to demonstrate that Generic// for loop can be used in iterating // Collections like HashMap  import java.io.*;import java.util.*;  class EnhancedForLoopExample {        public static void main(String[] args)    {        // create a empty hashmap        HashMap<String, String> map = new HashMap<>();          // enter name/url pair        map.put("GFG", "zambiatek.com");        map.put("Github", "www.github.com");        map.put("Practice", "practice.zambiatek.com");        map.put("Quiz", "www.zambiatek.com");          // using keySet() for storing          // all the keys in a Set        Set<String> key = map.keySet();          // Generic for loop for iterating all over the        // keySet        for (String k : key) {            System.out.println("key :" + k);        }          // Generic for loop for iterating all over the        // values        for (String url : map.values()) {            System.out.println("value :" + url);        }    }} | 
key :Quiz key :Github key :Practice key :GFG value :www.zambiatek.com value :www.github.com value :practice.zambiatek.com value :zambiatek.com
Limitations of Generic For loop or for-each loop:
1. Not appropriate when we want to modify the list.
for( Integer var : arr)
{
     // only changes the var value and not the value of the data stored inside the arr
     var = var + 100; 
} 
2. We cannot keep track of the index.
for( Integer var : arr){
     
     if(var == target)
     {   
         // don't know the index of var to be compared with variable target         
         return **; 
     }           
} 
4. Iterates a single step in forward direction only.
// This cannot be converted to Generic for loop
for( int i = n-1 ; i >= 0 ; i-- ) {
     // code
                            
}                  
4. Cannot process two decision-making statements at once.
// This loop cannot be converted to Generic for loop
for( int i = 0; i < arr.length; i++ ) {
     if( arr[i]==num )
         return **;
}                            
				
					


