En Java 8, tenemos un método forEach recientemente introducido para iterar sobre colecciones y flujos en Java. En esta guía, aprenderemos cómo usar los métodos forEach () y forEachOrdered () para recorrer una colección y un flujo en particular.

Java 8 – forEach para iterar un mapa

import java.util.Map;
import java.util.HashMap;
public class Example {
   public static void main(String[] args) {
      Map<Integer, String> hmap = new HashMap<Integer, String>();
      hmap.put(1, "Monkey");
      hmap.put(2, "Dog"); 
      hmap.put(3, "Cat");  
      hmap.put(4, "Lion");   
      hmap.put(5, "Tiger");   
      hmap.put(6, "Bear");
      /* forEach to iterate and display each key and value pair
       * of HashMap.    
       */  
      hmap.forEach((key,value)->System.out.println(key+" - "+value));
      /* forEach to iterate a Map and display the value of a particular  
       * key     
       */ 
      hmap.forEach((key,value)->{ 
         if(key == 4){ 
            System.out.println("Value associated with key 4 is: "+value); 
         }  
      });    
      /* forEach to iterate a Map and display the key associated with a
       * particular value     
       */
      hmap.forEach((key,value)->{
         if("Cat".equals(value)){ 
            System.out.println("Key associated with Value Cat is: "+key);
         }
      }); 
   }
}

Producción:
ejemplo de java 8 foreach

Java 8 – forEach para iterar a través de una lista

En este ejemplo, estamos iterando una ArrayList usando el método forEach (). Dentro de forEach estamos usando una expresión lambda para imprimir cada elemento de la lista.

import java.util.List;
import java.util.ArrayList;
public class Example {
   public static void main(String[] args) {
      List<String> fruits = new ArrayList<String>();
      fruits.add("Apple");
      fruits.add("Orange");
      fruits.add("Banana");
      fruits.add("Pear"); 
      fruits.add("Mango");
      //lambda expression in forEach Method 
      fruits.forEach(str->System.out.println(str));
   }
}

Producción:

Apple
Orange
Banana
Pear
Mango

También podemos usar el método de referencia en el método forEach () así:

fruits.forEach(System.out::println);

Java 8 – método forEach para iterar una secuencia

En este ejemplo, estamos iterando una secuencia en Java usando el método forEach ().

import java.util.List;
import java.util.ArrayList;
public class Example {
   public static void main(String[] args) {
      List<String> names = new ArrayList<String>();
      names.add("Maggie");
      names.add("Michonne");
      names.add("Rick");
      names.add("Merle");
      names.add("Governor");
      names.stream() //creating stream 
     .filter(f->f.startsWith("M")) //filtering names that starts with M 
     .forEach(System.out::println); //displaying the stream using forEach
   }
}

Producción:

Maggie
Michonne
Merle

Java – Ejemplo del método Stream forEachOrdered ()

Para los flujos secuenciales, el orden de los elementos es el mismo que el orden en la fuente, por lo que la salida sería la misma si se usa forEach o forEachOrdered. Sin embargo, cuando trabaje con flujos paralelos, siempre querrá utilizar el método forEachOrdered () cuando el orden sea importante para usted, ya que este método garantiza que el orden de los elementos sea el mismo que el del origen. Tomemos un ejemplo para comprender la diferencia entre forEach () y forEachOrdered ().

import java.util.List;
import java.util.ArrayList;
public class Example {
   public static void main(String[] args) {
      List<String> names = new ArrayList<String>();
      names.add("Maggie"); 
      names.add("Michonne");
      names.add("Rick");
      names.add("Merle");
      names.add("Governor"); 
      //forEach - the output would be in any order
      System.out.println("Print using forEach");
      names.stream() 
     .filter(f->f.startsWith("M"))
     .parallel() 
     .forEach(n->System.out.println(n)); 

     /* forEachOrdered - the output would always be in this order: 
      * Maggie, Michonne, Merle 
      */ 
     System.out.println("Print using forEachOrdered"); 
     names.stream()  
     .filter(f->f.startsWith("M"))  
     .parallel() 
     .forEachOrdered(n->System.out.println(n));
   }
}

Producción:

Print using forEach
Merle
Maggie
Michonne
Print using forEachOrdered
Maggie
Michonne
Merle

Referencias:

leer  Funciones de Java 8 con ejemplos

Por avivcas

Deja una respuesta

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