edu.stanford.nlp.util.IterableIterator Maven / Gradle / Ivy
package edu.stanford.nlp.util;
import java.util.*;
import java.util.stream.Stream;
/**
* This cures a pet peeve of mine: that you can't use an Iterator directly in
* Java 5's foreach construct. Well, this one you can, dammit.
*
* @author Bill MacCartney
*/
public class IterableIterator implements Iterator, Iterable {
private Iterator it;
private Iterable iterable;
private Stream stream;
public IterableIterator(Iterator it) {
this.it = it;
}
public IterableIterator(Iterable iterable) {
this.iterable = iterable;
this.it = iterable.iterator();
}
public IterableIterator(Stream stream) {
this.stream = stream;
this.it = stream.iterator();
}
public boolean hasNext() { return it.hasNext(); }
public E next() { return it.next(); }
public void remove() { it.remove(); }
public Iterator iterator() {
if (iterable != null) {
return iterable.iterator();
} else if (stream != null) {
return stream.iterator();
} else {
return this;
}
}
@Override
public Spliterator spliterator() {
if (iterable != null) {
return iterable.spliterator();
} else if (stream != null) {
return stream.spliterator();
} else {
return Spliterators.spliteratorUnknownSize(it, Spliterator.ORDERED | Spliterator.CONCURRENT);
}
}
}