Java ArrayList forEach() 方法详解

培训教学 潘老师 7个月前 (10-09) 196 ℃ (0) 扫码查看

ArrayList.forEach() 方法对列表的每个元素执行指定的 Consumer 操作,直到所有元素都被处理完或操作抛出异常。

默认情况下,操作按迭代顺序执行元素。

1.forEach() 的内部实现

如下所示,该方法遍历所有列表元素,并为每个元素调用 action.accept()。这里的 action 是 Consumer 接口的实例。

@Override
public void forEach(Consumer<? super E> action)
{
    Objects.requireNonNull(action);
    final int expectedModCount = modCount;
    @SuppressWarnings("unchecked")
    final E[] elementData = (E[]) this.elementData;
    final int size = this.size;
    for (int i=0; modCount == expectedModCount && i < size; i++) {
        action.accept(elementData[i]);
    }
    if (modCount != expectedModCount) {
        throw new ConcurrentModificationException();
    }
}
  • 方法参数:要对每个元素执行的 Consumer 操作。
  • 方法返回:void
  • 方法可能抛出:ConcurrentModificationExceptionNullPointerException

2.ArrayList forEach() 示例

2.1. 将所有列表项打印到控制台

让我们从一个非常简单的 Java 程序开始,只是将列表中的每个元素打印出来。我们也可以将相同的代码应用于 ArrayList 类。

List<String> list = Arrays.asList("A","B","C","D");
list.forEach(System.out::println);

2.2. 自定义 Consumer 操作

Consumer 实现接受一个参数,不返回值。我们也可以在其他地方传递我们创建的自定义操作。

例如,下面的代码遍历列表并使用 forEach() API 打印小写字符串。

Consumer<String> action = x -> System.out.println(x.toLowerCase());
list.forEach(action);

2.3. Lambda 表达式

我们也可以内联传递简单的 Lambda 表达式。如果 Consumer 操作中有多个语句,请使用大括号将这些语句包裹起来。

list.forEach(e -> {
  System.out.println(e.toLowerCase());
  //other statements
});

版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/9384.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】