@Override public boolean hasNext() { return flatteningIterator.hasNext(); }
/** * Returns if there are any objects left to iterate over. This method can * change the internal state of the object when it is called, but repeated * calls to it will not have any additional side effects. */ @Override public boolean hasNext() { moveToNext(); return (this.next != blank); } }
@Override public File next() { return flatteningIterator.next(); }
public FileListIterator(File file, FileFilter filter) { this.flatteningIterator = new FlatteningIterator<File>(new FileIterator(file, filter)); }
/** * Returns the next element in our iteration, throwing a * NoSuchElementException if none is found. */ @Override @SuppressWarnings("unchecked") public E next() { moveToNext(); if (this.next == blank) throw new NoSuchElementException(); else { Object next = this.next; this.next = blank; return (E)next; } }
private void moveToNext() { if ((next == blank) && !this.iterators.empty()) { if (!iterators.peek().hasNext()) { iterators.pop(); moveToNext(); } else { final Object next = iterators.peek().next(); if (next instanceof Iterator) { iterators.push((Iterator<?>) next); moveToNext(); } else if (next instanceof Iterable) { iterators.push(((Iterable<?>) next).iterator()); moveToNext(); } else if (next instanceof Array) { iterators.push(Arrays.asList((Array) next).iterator()); moveToNext(); } else this.next = next; } } }