Java 8 forEach()
在 Java 8 中,引入了一种遍历元素的新方法forEach()
方法。该方法作为默认方法添加到Iterable
接口。
我们可以使用这个方法遍历集合(列表、集合)元素。扩展 Iterable 接口的集合类可以使用 forEach()方法迭代元素。
就迭代元素而言,它与 for-loop 类似,但它被设计为迭代集合元素/对象。当我们处理返回一个可重复项(如列表、集合等)的流时,这很有帮助。因此,我们可以像在正常 for 循环中一样,在不知道它们的大小的情况下立即迭代它们。
这个方法是为 Java 中的函数式编程而添加的,所以,我们可以在流 API 中使用它来以函数式的方式遍历元素。
这个方法接受一个单一的参数,它是一个函数接口。因此,您可以传递参数,如 lambda 表达式、方法引用等作为参数。
句法
default void forEach(Consumer<? super T> action)
参数:
动作 -每个元素要执行的动作。
示例时间:遍历集合元素
让我们举个例子来遍历集合的元素。在本例中,我们使用 forEach()方法迭代ArrayList
的元素,lambda 表达式用于打印元素。
import java.util.ArrayList;
import java.util.List;
public class STDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("India");
list.add("China");
list.add("US");
list.add("UK");
list.forEach(country->System.out.println(country));
}
}
印度 中国 美国 英国
示例:使用方法引用遍历
我们也可以将方法引用传递给forEach()
方法,以函数的方式编写代码。在本例中,print()
方法使用方法引用调用,并作为参数传递给 forEach()方法。
import java.util.ArrayList;
import java.util.List;
public class STDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("India");
list.add("China");
list.add("US");
list.add("UK");
list.forEach(System.out::println);
}
}
印度 中国 美国 英国
示例:在流 API 中遍历
由于 forEach()的功能特性,它主要用于对流进行操作。这里我们有一个整数数组,然后我们使用 forEach()方法获取它的流对象来遍历它的元素。
import java.util.Arrays;
import java.util.stream.IntStream;
public class STDemo {
public static void main(String[] args) {
int[] arr = {2,5,36,9,8};
IntStream vals = Arrays.stream(arr);
vals.forEach(elements->System.out.println(elements));
}
}
2 5 36 9 8
流 forEachOrdered()方法
Stream 还提供了一个类似于 forEach()的方法forEachOrdered()
,只是它保证了遍历顺序。流操作不保证收集顺序。因此,当我们想要以指定的顺序遍历集合时,就使用 forEachOrdered()方法。下面给出了该方法的语法。
void forEachOrdered(Consumer<? super T> action)
示例:遍历流元素
在这个例子中,我们通过方法forEach()
和forEachOrdered()
遍历元素,检查它是否按顺序提供结果。见下面的例子。
import java.util.Arrays;
import java.util.stream.IntStream;
public class STDemo {
public static void main(String[] args) {
int[] arr = {2,5,36,9,8};
IntStream vals = Arrays.stream(arr);
vals.parallel().forEach(val->System.out.print(val+" "));
System.out.println();
vals = Arrays.stream(arr);
vals.parallel().forEachOrdered(val->System.out.print(val+" "));
}
}
36 8 9 2 5 2 5 36 9 8