bucle foreach() frente a Stream foreach() frente a flujo paralelo foreach()

bucle foreach()

  • No se usa el operador Lambda: el bucle foreach en Java no usa ninguna operación lambda y, por lo tanto, las operaciones se pueden aplicar en cualquier valor fuera de la lista que estamos usando para la iteración en el bucle foreach. El bucle foreach se ocupa de iterar la colección o la array almacenando cada elemento de la lista en una variable local y realizando cualquier funcionalidad que queramos.

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++]);
        }
    }
}
Producción: 

GeeksForGeeks
  • Aquí las operaciones de conteo son posibles incluso siendo una variable fuera del ciclo porque está en el alcance del ciclo foreach.
     
  • Se puede usar para todas las colecciones y arrays: se puede usar para iterar todas las colecciones y arrays en 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++]);
        }
    }
}
Producción: 

GeeksForGeeks
  • Las declaraciones de devolución funcionan dentro del ciclo: la función puede devolver el valor en cualquier momento dentro del ciclo. Por ejemplo, si queremos imprimir solo los primeros 2 valores de cualquier colección o array y luego queremos devolver cualquier valor, se puede hacer en el bucle foreach en Java. El siguiente código es para imprimir el segundo elemento de una 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);
    }
}
Producción: 

For

stream().paraCada()

  • Se usa el operador lambda: en stream().forEach() , se usan lambdas y, por lo tanto, no se permiten operaciones en variables fuera del bucle. Sólo son posibles las operaciones sobre las colecciones en cuestión. En esto, podemos realizar operaciones en Colecciones por código de una sola línea que lo hace fácil y simple de codificar.

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);
        });
    }
}
  • Nota: La operación «contar ++» generará un error porque las operaciones lambda no permiten ninguna operación de variable externa dentro de sí mismas. 
     
  • Solo se usa para iterar colecciones: stream().forEach() solo se usa para acceder a las colecciones como set y list. También se puede utilizar para acceder a 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); });
    }
}
  • Las declaraciones de devolución no funcionan dentro de este ciclo, pero las llamadas a funciones son muy fáciles de ejecutar: 
    la declaración de devolución dentro del ciclo no funciona. La misma funcionalidad de obtener el segundo elemento no se puede realizar en el mismo método forEach().

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);
    }
}
Producción: 

null

foreach paralelo()

  • Funciona en el concepto de subprocesos múltiples: la única diferencia entre stream().forEach() y foreach() paralelo es la característica de subprocesos múltiples dada en forEach() paralelo. Esto es mucho más rápido que foreach() y stream.forEach(). Al igual que stream().forEach(), también usa el símbolo lambda para realizar funciones. 
    El ejemplo que proporciona su naturaleza de subprocesos múltiples que se proporciona a continuación.
    Está claramente implícito que la salida nunca estará en el mismo orden para imprimir las strings debido a la naturaleza multiproceso de parallelStream.

la 

Producción: 

ForGeeksGeeks

 

diferencia tabular

bucle foreach() ciclo stream().foreach() Bucle paraleloStream().foreach()
No se utilizan operadores lambda. Se utiliza el operador lambda Se utiliza el operador lambda
Se puede utilizar para acceder a arrays y colecciones. Solo puede acceder a las colecciones Solo puede acceder a las colecciones
Las declaraciones de retorno o control funcionan dentro del bucle Las declaraciones de retorno o control no funcionan dentro del bucle. Las declaraciones de retorno o control no funcionan dentro del bucle.
Sin subprocesos múltiples, por lo que los datos lentos están en secuencia Sin subprocesos múltiples, por lo que los datos lentos están en secuencia Es multiproceso, por lo tanto, muy rápido y la secuencia es diferente.

Publicación traducida automáticamente

Artículo escrito por piyush25pv y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *