In this post, I am going to explain about for-each loop.
‘for-each’ is an enhanced version of for loop and provides a cleaner way to iterate over collections and arrays.
Let’s get comfortable by practising some examples.
Iterate over an array using for-each loop
Syntax
for (DataType ele : array) { 
    .....
    .....
}
Above snippet is equivalent to below ‘for’ loop version.
for (int i=0; i<arr.length; i++) 
{ 
    DataType ele = arr[i];
    .......
    .......
}
IterateOverArrayUsingForEachLoop.java
package com.sample.app;
public class IterateOverArrayUsingForEachLoop {
	public static void main(String[] args) {
		int[] arr = { 2, 3, 5, 7 };
		for (int ele : arr) {
			System.out.println(ele);
		}
	}
}
Output
2 3 5 7
Iterate over an List using for-each loop
Syntax
for (DataType ele : list) { 
    .....
    .....
}
Above snippet is equivalent to below ‘for’ loop version.
for(int i = 0; i < list.size(); i++) {
	DataType ele = list.get(i);
	......
	......
}
Find the below working application.
IterateOverListUsingForEachLoop.java
package com.sample.app;
import java.util.Arrays;
import java.util.List;
public class IterateOverListUsingForEachLoop {
	public static void main(String[] args) {
		List<Integer> list = Arrays.asList(2, 3, 5, 7);
		
		for(Integer ele: list) {
			System.out.println(ele);
		}
		
		for(int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
	}
}
Iterate over a map using for-each loop
Syntaxfor(DataType key: map.keySet()) {
	DataType valye = map.get(key);
	.....
	.....
}
Find the below working application.
IterateOverAMapUsingForEachLoop.java
package com.sample.app;
import java.util.HashMap;
import java.util.Map;
public class IterateOverAMapUsingForEachLoop {
	
	public static void main(String[] args) {
		Map<Integer, String> numbersMap = new HashMap<>();
		
		numbersMap.put(1, "One");
		numbersMap.put(2, "Two");
		numbersMap.put(3, "Three");
		
		for(Integer key: numbersMap.keySet()) {
			System.out.printf("%d --> %s\n", key, numbersMap.get(key));
		}
	}
}
Output
1 --> One 2 --> Two 3 --> Three
You can refer this post, to find different ways to iterate over a map using for-each loop.
 
Can I provide for-each behaviour to custom collection?
By implementing Iterable interface, we can provide for-each behaviour to a custom collection.
EvenIndicesList.java
package com.sample.app;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
public class EvenIndicesList<T> implements Iterable<T> {
	private List<T> list;
	EvenIndicesList(List<T> list) {
		this.list = list;
	}
	public Iterator<T> iterator() {
		return new EvenIterator<T>();
	}
	@SuppressWarnings("hiding")
	private class EvenIterator<T> implements Iterator<T> {
		int size = list.size();
		int currentPointer = 0;
		public boolean hasNext() {
			return (currentPointer < size);
		}
		public T next() {
			if (!hasNext()) {
				throw new NoSuchElementException();
			}
			@SuppressWarnings("unchecked")
			T val = (T) list.get(currentPointer);
			currentPointer += 2;
			return val;
		}
	}
}
‘EvenIndicesList’ class print the elements at even indexes while iterate using for-each loop. Let’s test this behaviour.
TestEvenList.java
package com.sample.app;
import java.util.Arrays;
import java.util.List;
public class TestEvenList {
	public static void main(String args[]) {
		List<Integer> list = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19);
		EvenIndicesList<Integer> myList = new EvenIndicesList(list);
		for (int i : myList) {
			System.out.println(i);
		}
	}
}
Output
2 5 11 17
  
You may like
Get the length of longest row in a two dimensional jagged array in Java
Quick guide to OutOfMemoryError in Java
No comments:
Post a Comment