1. Introduction
In this tutorial, You'll learn how to iterate ArrayList using the forEach() method in Java 8. Now ArrayList comes up with a handy utility method to traverse all the elements of List using arraylist foreach.
forEach() is added as part of java 8 changes.
Read more articles on ArrayList.
forEach() method iterates the values till last value or it throws an exception.
This is a complete replacement for the traditional Iterator concept. Internally, It does the looping around the list values.
First, We will see the syntax, its internal implementation, and examples to use forEach() method.
Iterating List, Map or Set with forEach() method
2. Java 8 ArrayList forEach() Syntax
Java 8 ArrayList forEach()
The below is the syntax from api documentation which takes the Consumer functional interface.[public void forEach(Consumer<? super E> action)]
NullPointerException - if the specified action is null
If consumer action is null then it throws runtime exception saying "NullPointerException".
3. forEach() Internal Code
First of all, forEach() is a overridden method and runs the for loop and calls consumer.accept() method for each value.
@Override public void forEach(Consumer<? super E> action) { Objects.requireNonNull(action); final int expectedModCount = modCount; @SuppressWarnings("unchecked") final E[] elementData = (E[]) this.elementData; final int size = this.size; for (int i=0; modCount == expectedModCount && i < size; i++) { action.accept(elementData[i]); } if (modCount != expectedModCount) { throw new ConcurrentModificationException(); } }
If the original ArrayList is modified within the forEach() method then it will throw ConcurrentModificationException
This seems like a iterator() but it reduces the lots of boilerplate coding for checking it.hasNext() or it.next() methods.
4. Example to print the values of ArrayList using forEach() Method
First created a List with String type values and added few fruit names to it.Next, invoking for each method on the list object and passing the Consumer implementation to it.
Inside the consumer just add "System.out.println()" statement to print the values.
package com.javaprogramto.java8.arraylist; import java.util.ArrayList; import java.util.List; public class ArrayListForEach { public static void main(String[] args) { List<String> freshFruites = new ArrayList<>(); freshFruites.add("tomato"); freshFruites.add("potato"); freshFruites.add("Beans"); freshFruites.forEach( fruitName -> System.out.println(fruitName)); } }
Output:
[tomato
potato
Beans]
5. Example to convert the String to Upper case using forEach() method
The below program to convert all list values into upper case.List<String> names = new ArrayList<>(); names.add("rama"); names.add("sita"); Consumer<String> upperCase = string -> System.out.println(string.toUpperCase()); names.forEach(upperCase);
Output:
[RAMA
SITA]
6. Example To Throw ConcurrentModificationException with forEach()
Let us try to add a new vegetable to the list from the consumer logic. In this case, mod count and the expected mod count will be mismatched. Hence, forEach() will throw ConcurrentModificationException.
List<String> freshVegs = new ArrayList<>(); freshVegs.add("tomato"); freshVegs.add("potato"); freshVegs.add("Beans"); freshVegs.forEach(fruitName -> { System.out.println(fruitName); freshVegs.add("Bitter Guard"); });
Output:
[tomato
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList.forEach(ArrayList.java:1260)
at com.javaprogramto.java8.arraylist.ArrayListForEach.main(ArrayListForEach.java:17)]
It is good practice to avoid original underlying modification inside the forEach() method which works similarly to the Iterator looping.
7. Example To Throw NullPointerException with forEach()
If we pass the consumer as null then it throws NullPointerException. If you know that you are going to pass null to it then add a null check before forEach() method invocation. It is a good practice not to call forEach() incase the consumer is null.
Otherwise, as a result it produces the exception.
// NullPointerExceptionfreshVegs.forEach(null); names.forEach(null);
Output:
[Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.ArrayList.forEach(ArrayList.java:1251)
at com.javaprogramto.java8.arraylist.ArrayListForEach.main(ArrayListForEach.java:30)]
8. Java 8 ArrayList forEach() Examples Full Example
Finally, Putting together all the examples in single program.package com.javaprogramto.java8.arraylist; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; public class ArrayListForEach { public static void main(String[] args) { List<String> freshVegs = new ArrayList<>(); freshVegs.add("tomato"); freshVegs.add("potato"); freshVegs.add("Beans"); freshVegs.forEach(fruitName -> { System.out.println(fruitName); // uncomment to throw ConcurrentModificationException freshVegs.add("Bitter Guard"); }); List<String> names = new ArrayList<>(); names.add("rama"); names.add("sita"); Consumer<String> upperCase = string -> System.out.println(string.toUpperCase()); names.forEach(upperCase); // NullPointerException freshVegs.forEach(null); names.forEach(null); } }
9. Conclusion
In this article and in conclusion, You've seen how to use the ArrayList forEach() method with examples.And also seen all possible exceptions thrown by this method at runtime and how to handle each.
Shown how it is implemented internally.
All the code is shown in this article is over GitHub.
You can download the project directly and can run in your local without any errors.
If you have any queries please post in the comment section.
No comments:
Post a Comment
Please do not add any spam links in the comments section.