在 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迭代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 Methodfruits.forEach(str->System.out.println(str));}}
输出:
AppleOrangeBananaPearMango
我们也可以在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}}
输出:
MaggieMichonneMerle
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 orderSystem.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 forEachMerleMaggieMichonnePrint using forEachOrderedMaggieMichonneMerle
