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 >