foreach() loop vs Stream foreach() vs Parallel Stream foreach()

29 May, 2021
Lambda operator is not used: foreach loop in Java doesn’t use any lambda operations and thus operations can be applied on any value outside the list that we are using for iteration in the foreach loop. The foreach loop is concerned over iterating the collection or array by storing each element of the list on a local variable and doing any functionality that we want.
Java
public class GFG {     public static void main(String[] args)    {        String[] arr = { "1", "2", "3" };        int count = 0;         String[] arr1 = { "Geeks", "For", "Geeks" };         for (String str : arr) {            System.out.print(arr1[count++]);        }    }}
GeeksForGeeks
Here operations on count are possible even being a variable outside the loop because it is in the scope of the foreach loop. 
It can be used for all collections and arrays: It can be used to iterate all collections and arrays in Java.
Java
public class GFG {     public static void main(String[] args) throws Exception    {         String[] arr = { "1", "2", "3" };        int count = 0;         String[] arr1 = { "Geeks", "For", "Geeks" };         for (String str : arr) {            System.out.print(arr1[count++]);        }    }}
GeeksForGeeks
The return statements work within the loop: The function can return the value at any point of time within the loop. For example, if we want to print only the first 2 values of any collection or array and then we want to return any value, it can be done in foreach loop in Java. The code below is for printing the 2nd element of an array.
Java
public class GFG {     public static String frechlop(String[] geek)    {        int count = 0;        for (String var : geek) {            if (count == 1)                return var;            count++;        }        return "";    }     public static void main(String[] args)        throws Exception    {         String[] arr1 = { "Geeks", "For", "Geeks" };        String secelt = frechlop(arr1);        System.out.println(secelt);    }}
For
Lambda operator is used: In stream().forEach(), lambdas are used and thus operations on variables outside the loop are not allowed. Only the operations on concerned collections are possible. In this, we can perform operations on Collections by single line code that makes it easy and simple to code.
Java
import Java.util.*;public class GFG {     public static void main(String[] args) throws Exception    {         List<String> arr1 = new ArrayList<String>();        int count = 0;        arr1.add("Geeks");        arr1.add("For");        arr1.add("Geeks");        arr1.stream().forEach(s -> {            // this will cause an error            count++;             // print all elements            System.out.print(s);        });    }}
Note: The operation “count++” will cause an error because lambda operations do not allow any external variable operation within themselves.  
Only used to iterate collections: The stream().forEach() is only used for accessing the collections like set and list. It can also be used for accessing arrays.
Java
import java.util.*;public class GFG {     public static void main(String[] args) throws Exception    {         String[] arr1 = { "Geeks", "for", "Geeks" };         // The next line will throw error        // as there is no such method as stream()        arr1.stream().forEach(            s -> { System.out.print(s); });    }}
Return statements don’t work within this loop, but the function calls are very easy to call: The return statement within the loop doesn’t work. The same functionality of getting the 2nd element cannot be done in the same forEach() method.
Java
import Java.util.*; public class GFG {     static String second(List<String> list)    {        list.stream().forEach(            s            -> {                // The next line will throw error                // as no return allowed                 // if(s=="For")return s;             });        return "null";    }     public static void main(String[] args) throws Exception    {         List<String> arr1 = new ArrayList<String>();        arr1.add("Geeks");        arr1.add("For");        arr1.add("Geeks");        String f = second(arr1);        System.out.println(f);    }}
null
Works on multithreading concept: The only difference between stream().forEach() and parallel foreach() is the multithreading feature given in the parallel forEach(). This is way faster that foreach() and stream.forEach(). Like stream().forEach() it also uses lambda symbol to perform functions. The example providing its multithreading nature which is given as follows.It’s clearly implied that the output will never be in the same order for printing the strings due to parallelStream’s multithreaded nature.
the 
ForGeeksGeeks
 
aratan
koushalgoyal67
varshagumber28
Picked
Difference Between
Java
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Difference between var, let and const keywords in JavaScript
Difference Between Method Overloading and Method Overriding in Java
Differences between JDK, JRE and JVM
Differences between IPv4 and IPv6
Difference between MANET and VANET
Object Oriented Programming (OOPs) Concept in Java
Reverse a string in Java
Arrays.sort() in Java with examples
How to iterate any Map in Java
Interfaces in Java