java - 如果 forEach 是抽象方法,它如何将 lambda 表达式应用于数组?

标签 java foreach interface iterable

List<String> friends = Arrays.asList("Brian", "Nate", "Neal", "Sara");
friends.forEach(name -> System.out.println(name));

我正在学习java,我发现了这个例子,我只是将它放在main中,它正常打印了数组,所以我的问题是:

据我了解 name -> System.out.println(name) 是一个 lambda 表达式,用于快速实现打印功能,但我想知道 forEach 是如何应用的它是数组的每个元素?它是 Iterable 接口(interface)的一个方法,因此...空,那么代码在哪里告诉我们将 print 应用于数组中的每个名称?

最佳答案

Arrays.asList 在当前实现中返回 ArrayList,它具有使用普通 for 循环进行迭代的 forEach 实现 将 lambda 应用于每个元素。它重写(通过某些继承层)并实现Iterable.forEach。当然,它还扩展了List。来自 java.util.ArrayList:

for (int i = 0; modCount == expectedModCount && i < size; i++)
    action.accept(elementAt(es, i)); 

来自 java.util.Arrays:

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

关于java - 如果 forEach 是抽象方法,它如何将 lambda 表达式应用于数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59020633/

相关文章:

java - 使用递归循环 boolean 数组

go - 为什么返回具体类型不满足需要接口(interface)返回的接口(interface)

java - 如果以下代码中发生错误,如何关闭 Excel 文件而不崩溃

java - 创建仅具有 final方法的抽象类有什么好处?

vb.net - 对于 ListBox1 中的每个项目做一些事情然后将项目添加到 listbox2 vb

php - foreach 循环中数组 undefined offset 通知

c++ - 防止通过接口(interface)删除对象

c# 实现接口(interface)的抽象类

java - Android 中 R.java 中的语法错误

java - Spring,渲染列表为 <c :forEach> gives error