对象数组(T[])的默认迭代器实现?

0xb*_*7ed 0 java arrays iterator java-8

我有一个类,类似于下面的代码。它实现了Iterable<T>iterface,用于在其包含的数组上提供迭代功能。

我一直习惯于使用自己的简单迭代器来迭代数组。然而,我刚刚意识到,至少对于spliterators来说,您可以通过调用 来获得可接受的默认实现Arrays.spliterator(array)。普通Iterator<T>数组上是否有类似的默认实现T

public class MyClass implements Iterable<ContainedClass>
{
    ...
    private final ContainedClass[] array;
    ...

    //
    // INTERFACE: Iterable<ContainedClass>
    //

    @Override
    public Iterator<ContainedClass> iterator() {
        return ??? // I want to return a default implementation, not my own!
    }

    @Override
    public Spliterator<ContainedClass> spliterator() {
        return Arrays.spliterator(array);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*bel 5

最接近 JDK 中默认实现的东西:

Arrays.asList(array).iterator()
Run Code Online (Sandbox Code Playgroud)

简单的自定义实现:

public final class ArrayIterator<E> implements Iterator<E> {
    private final E[] _elements;
    private int _index;

    @SafeVarargs
    public ArrayIterator(final E... elements) {
        _elements = Objects.requireNonNull(elements);
    }

    public boolean hasNext() {
        return _index < _elements.length;
    }

    public E next() {
        if (hasNext()) {
            return _elements[_index++];
        }
        throw new NoSuchElementException();
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}
Run Code Online (Sandbox Code Playgroud)