欢迎访问宙启技术站
智能推送

Java8 ArrayList之forEach怎么用

发布时间:2023-05-17 21:24:02

Java8引入了很多新特性,其中包括针对集合的forEach方法。在Java8之前,我们使用迭代器或者for循环来遍历集合,但是这样做的代码冗长,难以维护。而Java8中的forEach方法可以让我们用更加简洁、易读的方式遍历集合。

ArrayList是Java中常用的集合类型之一,这篇文章将介绍如何使用Java8提供的forEach方法来遍历ArrayList。

1. 基本语法

forEach方法是集合类型的方法,可以被ArrayList调用。forEach方法需要一个参数,即函数式接口Consumer<T>类型的实例作为参数。Consumer是一个函数式接口,只有一个抽象方法,接受一个参数,并且不返回值。Consumer<T>定义如下:

public interface Consumer<T> {

    /**

     * 对给定的参数执行此操作。

     *

     * @param t 参数

     */

    void accept(T t);

    /**

     * 返回一个组合的消费者,将其结果作为 个消费者的输入。

     *

     * @param after 该消费者在此之后调用的消费者

     * @return 组合消费者

     * @throws NullPointerException 如果after为空,则抛出此异常

     */

    default Consumer<T> andThen(Consumer<? super T> after) {

        Objects.requireNonNull(after);

        return (T t) -> { accept(t); after.accept(t); };

    }

}

可以看出,在Consumer接口中,accept方法表示要执行的操作,andThen方法表示将接受者和另一个Consumer组合成一个链。

由于ArrayList是一个泛型集合,所以我们需要在传递函数式接口时指定一个泛型参数,来表示集合中的元素类型。

2. 遍历ArrayList

下面是一些ArrayList遍历的基本示例:

ArrayList<String> list = new ArrayList<>();

list.add("Java");

list.add("Python");

list.add("JavaScript");

// 使用 forEach + lambda 表达式遍历

list.forEach(item -> System.out.println(item));

结果输出:

Java

Python

JavaScript

3. 遍历ArrayList并对每个元素进行操作

当需要对集合中的每个元素进行一些操作时,使用forEach方法就非常方便。例如,下面的代码将一个字符串集合中的每个元素转换为大写字母:

ArrayList<String> list = new ArrayList<>();

list.add("Java");

list.add("Python");

list.add("JavaScript");

// 遍历并对每个元素进行操作

list.forEach(item -> {

    String upper = item.toUpperCase(); // 转为大写字母

    System.out.println(upper);

});

结果输出:

JAVA

PYTHON

JAVASCRIPT

4. 使用方法引用

除了使用lambda表达式之外,我们还可以使用方法引用来更简洁地编写代码。在使用方法引用时,我们需要定义一个方法,然后将其作为参数传递给forEach方法。这样,每次迭代时,方法引用就会被调用。

例如,我们可以创建一个叫做print的方法来代替Lambda表达式:

public static void print(String str) {

    System.out.println(str);

}

ArrayList<String> list = new ArrayList<>();

list.add("Java");

list.add("Python");

list.add("JavaScript");

// 使用方法引用遍历

list.forEach(Main::print);

5. 总结

在本文中,我们介绍了如何使用Java8中的forEach方法来遍历ArrayList,并对每个元素进行操作。我们了解了如何通过lambda表达式和方法引用来传递函数式接口作为参数。通过这些例子,我们可以看到,使用Java8的forEach方法可以使代码更简洁、易读。