I usually try to stick with standard Java interfaces, so people can more easily understand how it is used.  To be honest I would rather use the Streamable interface, but since we aren't on Java 8 yet, I can't use it.

The other thing is I could is add support for remove, but the questionable thing is how this interacts with any ongoing transaction.

I personally think it is with iterator for now and they will get a UnsupportedOperation exception if they do try to use remove.  I think once we get to Java 8, which I thought would be a while (may not though) I can change this to be Streamable and it will be much nicer.  WDYT?