Java 8 Java8内部迭代

Java 8 Java8内部迭代,java-8,java-stream,Java 8,Java Stream,Java8foreach方法是否真正使用迭代器?我用谷歌搜索到骨头,找不到确切的位置。只有它将以与数据相同的顺序进行迭代这一事实才是正确的 任何提示?Iterable#forEach的默认实现基于迭代器 default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.a

Java8foreach方法是否真正使用迭代器?我用谷歌搜索到骨头,找不到确切的位置。只有它将以与数据相同的顺序进行迭代这一事实才是正确的


任何提示?

Iterable#forEach的默认实现基于迭代器

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

default void forEach(consumerd另一方面:客户端不应依赖任何
Iterable
实现来使用底层的
迭代器
。即使当前实现如此,未来的版本也可能不会。由于调用方不知道
forEach
是否将使用
迭代器,因此它是一个“内部迭代”是整个要点:迭代的实现方式隐藏在实际的
forEach
实现中。
    @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();
        }
    }