List<String> friends = Arrays.asList("Brian", "Nate", "Neal", "Sara");
friends.forEach(name -> System.out.println(name));
我正在研究java,我找到了这个例子,我只是把它放在一个主引擎中,它正常打印了数组,所以我的问题是:
在我的理解中name -> System.out.println(name)
是用于快速实现打印功能的 lambda 表达式,但我想知道forEach
如何将其应用于数组的每个元素?这是一种Iterable
接口的方法,因此...空,那么将打印应用于数组中每个名称的代码在哪里?
Arrays.asList
在当前实现中返回ArrayList
,该实现具有forEach
迭代的实现,使用将lambda应用于每个元素的普通for-loop
进行迭代。它覆盖(通过某些继承层(并实现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);
}
forEach
是 Iterable 接口的默认方法,默认实现只是针对每个元素的循环调用Consumer
进行了增强
for (T t : this)
action.accept(t);
对可迭代对象的每个元素执行给定的操作,直到处理完所有元素或操作引发异常。除非实现类另有指定,否则操作按迭代顺序执行(如果指定了迭代顺序(。操作引发的异常将中继到调用方。