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)
最接近 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)