Class ExtendedIterator<T>

  • Type Parameters:
    T - The type of object returned from the iterator.
    All Implemented Interfaces:
    java.util.Iterator<T>, IteratorOperations<T>

    public final class ExtendedIterator<T>
    extends java.lang.Object
    implements IteratorOperations<T>
    Extends Iterator functionality to include operations commonly found on streams (for example filtering, concatenating, mapping). It also provides convenience methods for common operations.
    Since:
    4.5.0-M3
    • Method Detail

      • create

        public static <T> ExtendedIterator<T> create​(java.util.Iterator<T> it)
        Create an ExtendedIterator returning the elements of it. If it is itself an ExtendedIterator, return that; otherwise wrap it.
        Type Parameters:
        T - The type of object returned from the iterator.
        Parameters:
        it - The iterator to wrap.
        Returns:
        An Extended iterator wrapping it
      • create

        public static <T> ExtendedIterator<T> create​(java.util.stream.Stream<T> stream)
        Creates an ExtendedIterator wrapped round a Stream. The extended iterator does not permit .remove().

        The stream should not be used directly. The effect of doing so is undefined.

        Type Parameters:
        T - The type of object returned from the iterator.
        Parameters:
        stream - the Stream to create an iterator from.
        Returns:
        an Extended iterator on the stream iterator.
      • createNoRemove

        public static <T> ExtendedIterator<T> createNoRemove​(java.util.Iterator<T> it)
        Creates an ExtendedIterator wrapped round it, which does not permit .remove() even if it does.
        Type Parameters:
        T - The type of object returned from the iterator.
        Parameters:
        it - The Iterator to wrap.
        Returns:
        an Extended iterator on it
        Throws:
        java.lang.UnsupportedOperationException - if remove() is called on the resulting iterator.
      • flatten

        public static <T> ExtendedIterator<T> flatten​(java.util.Iterator<java.util.Iterator<T>> iterators)
        Flattens an iterator of iterators into an Iterator over the next level values. Similar to list splicing in lisp.
        Type Parameters:
        T - The type of object returned from the iterator.
        Parameters:
        iterators - An iterator of iterators.
        Returns:
        An iterator over the logical concatenation of the inner iterators.
      • andThen

        public <X extends TExtendedIterator<TandThen​(java.util.Iterator<X> other)
        Chains the other iterator to the end of this one.
        Type Parameters:
        X - The type of object returned from the other iterator.
        Parameters:
        other - the other iterator to extend this iterator with.
        Returns:
        A new iterator returning the contents of this iterator followed by the contents of other iterator.
      • filter

        public ExtendedIterator<Tfilter​(java.util.function.Predicate<T> predicate)
        Filter this iterator using a predicate. Only items for which the predicate returns true will be included in the result.
        Parameters:
        predicate - The predicate to filter the items with.
        Returns:
        An iterator filtered by the predicate.
      • forEachRemaining

        public void forEachRemaining​(java.util.function.Consumer<? super T> action)
        Specified by:
        forEachRemaining in interface java.util.Iterator<T>
      • hasNext

        public boolean hasNext()
        Specified by:
        hasNext in interface java.util.Iterator<T>
      • map

        public <U> ExtendedIterator<U> map​(java.util.function.Function<T,​U> function)
        Map the elements of the iterator to a now type.
        Type Parameters:
        U - The object type to return.
        Parameters:
        function - The function to map elements of <T> to type <U>.
        Returns:
        An Extended iterator that returns a <U> for very <T> in the original iterator.
      • next

        public T next()
        Specified by:
        next in interface java.util.Iterator<T>
      • remove

        public void remove()
        Specified by:
        remove in interface java.util.Iterator<T>