Skip to content

Latest commit

 

History

History
166 lines (140 loc) · 5.02 KB

65.md

File metadata and controls

166 lines (140 loc) · 5.02 KB

Java 8 forEach方法

原文: https://beginnersbook.com/2017/10/java-8-foreach/

在 Java 8 中,我们有一个新引入的forEach方法来迭代 Java 中的集合。在本指南中,我们将学习如何使用forEach()forEachOrdered()方法来循环特定的集合和流。

Java 8 - forEach迭代Map

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);
         }
      }); 
   }
}

输出:

java 8 foreach example

Java 8 - forEach迭代List

在这个例子中,我们使用forEach()方法迭代ArrayList。在forEach中,我们使用 lambda 表达式来打印列表的每个元素。

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));
   }
}

输出:

Apple
Orange
Banana
Pear
Mango

我们也可以在forEach()方法中使用方法引用,如下所示:

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

Java 8 - 迭代流的forEach方法

在这个例子中,我们使用forEach()方法在 Java 中迭代

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
   }
}

输出:

Maggie
Michonne
Merle

Java - Stream forEachOrdered()方法示例

对于顺序流,元素的顺序与源中的顺序相同,因此无论使用forEach还是forEachOrdered,输出都是相同的。但是,在处理并行流时,您总是希望在订单对您很重要时使用forEachOrdered()方法,因为此方法可确保元素的顺序与源相同。让我们举个例子来理解forEach()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));
   }
}

输出:

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

参考文献: