BoundedIterable.java

  1. package no.motif.iter;

  2. import static no.motif.Singular.optional;

  3. import java.io.Serializable;
  4. import java.util.Iterator;

  5. import no.motif.Singular;
  6. import no.motif.single.Optional;

  7. class BoundedIterable<T> implements Iterable<T>, Serializable {

  8.     private final Iterable<T> elements;
  9.     private final int maxAmount;

  10.     BoundedIterable(int maxAmount, Iterable<T> elements) {
  11.         this.maxAmount = maxAmount;
  12.         this.elements = elements;}

  13.     @Override public Iterator<T> iterator() {
  14.         return new SimpleIterator<T>() {
  15.             int returned = 0;
  16.             final Iterator<T> iterator = elements.iterator();
  17.             @Override protected Optional<T> nextIfAvailable() {
  18.                 return returned++ < maxAmount && iterator.hasNext()? optional(iterator.next()) : Singular.<T>none();
  19.             }};
  20.     }

  21. }