What is the advantage of using an ExtendedIterator to
filter/chain/map/flatten instead of using Stream to do the same?

On Sat, Oct 19, 2024 at 5:16 AM Claude Warren <cla...@xenei.com> wrote:

> I would like to introduce a new Iterator to the iterator library:
> ExtendedIterator
>
> This Iterator is an Iterator that extends the functionality of other
> iterators and makes using some iterators in the library more idiomatic.  It
> is based on the ExtendedIterator found in the new Apache Rat core package
> that was inspired by the Apache Jena ExtendedIterator interface.
>
> I propose a class ExtendedIterator<T> that extends Iterator<T> and has the
> following additional methods.
>
> Static methods (all methods return an ExtendedIterator<T>)
>
>    - createNoRemove(final Iterator<T> it) -- prohibits removal on an
>    iterator that otherwise would allow removal.
>    - ofStream(final Stream<T> stream) -- convenience method to create
>    ExtendedIterator from stream.
>    - create(final Iterator<T> it)-- creates an ExtendedIterator from a
>    plain iterator.  If the Iterator is already "extended" just return it.
>    - emptyIterator() -- convenience method to creat an empty
>    ExtendedIterator.
>    - unwind(final Iterator<Iterator<T>> woundIterator) -- creates an
>    Iterator<T> by iterating through each of the iterators in
> "woundIterator"
>
> Instance methods (Unless otherwise noted all methods return an
> ExtendedIterator<T>)
>
>    - T removeNext() -- extracts the next item from the iterator and calls
>    remove() to remove it.
>    - andThen(final Iterator<X> other)-- <X extends T> uses an IteratorChain
>    to create a chain of iterators.
>    - filter(final Predicate<T> predicate) -- uses a FilterIterator to
>    exclude the items from the iterator.
>    - ExtendedIterator<U> map(final Function<T, U> function) -- uses a
>    TransformerIterator to transform the items to a new type.
>    - <U extends Collection<T>> U addTo(final U collection) -- Adds the
>    remaining items in the iterator to the collection.
>
> The advantage of the iterator is the idiomatic nature.
>
> Iterator<Thing> iter;
> List<OtherThing> lst =
> ExtendedIteratot.create(iter).filter(Thing::isValid).map(thing -> new
> OtherThing(thing)).addTo(new ArrayList<>());
>
> Claude
> --
> LinkedIn: http://www.linkedin.com/in/claudewarren
>

Reply via email to