Java 8 forEach()

原文:https://www.studytonight.com/java-8/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