package resa.util; import java.util.Iterator; import java.util.Objects; /** * Iterate on a given iterator within a time bound * * @author Troy Ding */ public class TimeBoundedIterable<T> implements Iterable<T> { private Iterator<T> input; private long stopTimeStamp; public TimeBoundedIterable(long duration, Iterable<T> input) { this.input = Objects.requireNonNull(input).iterator(); this.stopTimeStamp = System.currentTimeMillis() + duration; } @Override public Iterator<T> iterator() { return new Iter(); } private class Iter implements Iterator<T> { @Override public boolean hasNext() { return System.currentTimeMillis() < stopTimeStamp && input.hasNext(); } @Override public T next() { return input.next(); } } }