Java 8 Streams forEach Examples
forEach on an Array
Since an array in Java is not an Iterable, you cant directly use forEach()
with it like you can with List, Map and other classes that implement the
Iterable interface.
The workaround to this is to simply convert the array to a Stream first using
the built-in Arrays.stream() function - see
Converting from Streams to Arrays for more
details on converting between arrays and streams.
package xyz.byexample.java8;
import java.util.Arrays;
public class forEach {
public static void main(String[] args) {
String[] letters = new String[]{"a", "b", "c"};
Arrays.stream(letters).forEach((String letter) -> {
System.out.println(letter);
});
}
}
Output
a
b
c
Alternatively we can use method references to simplify out code and cut out the entire anonymous function we passed in.
String[] letters = new String[]{"a", "b", "c"};
Arrays.stream(letters).forEach(System.out::println);
Output
a
b
c
forEach on a List
Using forEach on a List is just as simple as using it on a Stream in the
above array example:
List<Integer> numbers = Arrays.asList(1,2,3);
numbers.forEach((Integer number) -> {
System.out.println(number);
});
Output
1
2
3
Here we used a anonymous function, but we could have used a method reference had we wanted to, just like with arrays.
forEach on a Map
When using forEach on a Map, things are slightly different than with
arrays or a List since we have both a key and a value so we need to use
an anonymous function that implements the BiConsumer interface rather than
just a simple Consumer as before:
Map<String, String> countries = new HashMap<>();
countries.put("fr", "France");
countries.put("us", "United States");
countries.put("nz", "New Zealand");
countries.forEach((String key, String value) -> {
System.out.println("Key: " + key + " Value: " + value);
});
Output
Key: fr Value: France
Key: nz Value: New Zealand
Key: us Value: United States