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