Java8 ArrayList之forEach怎么用
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方法可以使代码更简洁、易读。
