JDK8—foreach遍历集合
在JDK 8中,根据Lambda表达式特性还新增了一个forEach(Consumer action)方法来遍历集合,该方法所需要的参数是一个函数式接口。接下来通过一个案例来演示如何使用forEach(Consumer action)遍历集合对象,如文件1所示。
文件1 Example07.java
1 import java.util.ArrayList;
2 public class Example07 {
3 public static void main(String[] args) {
4 ArrayList list = new ArrayList();
5 list.add("data_1");
6 list.add("data_2");
7 list.add("data_3");
8 System.out.println(list);
9 // 使用JDK 8新增的forEach(Consumer action)方法遍历集合
10 list.forEach(obj -> System.out.println("迭代集合元素:"+obj));
11 }
12 }
运行结果如图1所示。
图1 运行结果
文件1中,首先创建了一个集合对象并调用add()方法向集合添加三个元素,接着打印该集合信息,然后使用forEach(Consumer action)方法对集合中的元素进行遍历,该方法传递的是一个Lambda表达式形式书写的函数式接口。forEach(Consumer action)方法在执行时,会自动遍历集合元素并将元素逐个传递给Lambda表达式的形参。
JDK 8中除了针对所有集合类型对象新增了一个forEach(Consumer action)方法来遍历集合外,还针对Iterator迭代器对象提供了一个forEachRemaining(Consumer action)方法来进行遍历,该方法同样需要一个函数式接口。接下来通过一个案例来演示如何使用forEachRemaining(Consumer action)方法遍历Iterator接口元素,如文件2所示。
文件2 Example08.java
1 import java.util.ArrayList;
2 import java.util.Iterator;
3 public class Example08 {
4 public static void main(String[] args) {
5 ArrayList list = new ArrayList();
6 list.add("data_1");
7 list.add("data_2");
8 list.add("data_3");
9 System.out.println(list);
10 // 将集合转换为Iterator迭代器对象
11 Iterator it = list.iterator();
12 // 使用JDK 8新增的forEachRemaining(Consumer action)来遍历迭代器对象
13 it.forEachRemaining(obj -> System.out.println("迭代集合元素:"+obj));
14 }
15 }
运行结果如图2所示。
图2 运行结果
同文件1对比可以看出,文件2中只是将集合对象转换为Iterator迭代器对象,然后使用forEachRemaining(Consumer action)方法对集合中的元素进行遍历,而从程序运行结果看出,两种集合遍历方式得到的结果完全相同,都能够正确遍历出集合元素。
小提示:
在本小节List集合遍历中,讲解了List集合遍历的三种主要方法,这些方法都可以用来对单例集合Collection进行遍历,包括List集合以及后面将要讲解的Set集合。