I've become fascinated by iterators, those small bits of code which turn out an object one at a time. For example, Python has generator comprehensions while Java has iterators and C++ likewise.
Presently I'm adding to my list of Java iterator adaptors, objects which wrap an underlying iterator to produce one with modified behavior. Two excellent examples are FilterIterator
which wraps a ListIterator
[1] and produces only elements matching a criteria, and ReverseIterator
which also wraps a ListIterator
to produce the underlying elements in reverse order. I also coded ListIterator
versions of each which are bidirectional.
I still have a lot of work, however. C++'s STL is still way ahead of Java's collection classes. I am thinking of putting my work up on SourceForge or some other similar place (perhaps something more Java-specific) under the GPL but have let laziness get the better of me so far. Laziness, Impatience, Hubris [pdf]. What could be better?
[1] FilterIterator
wraps a ListIterator
rather than an Iterator
for a good reason. To properly filter, one needs lookahead which implies the ability to back up the underlying iterator if lookahead failed, hence one needs a reversible iterator with previous()
. FilterIterator
doesn't just produce the right output, it makes the underlying Iterator
behave as if it contained only the filtered elements.
No comments:
Post a Comment