[ https://issues.apache.org/jira/browse/JENA-966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14596710#comment-14596710 ]
Andy Seaborne commented on JENA-966: ------------------------------------ Adding {{andThen(Supplier<Iterator<T>>)}} to {{ExtendedIterator}} complicates the {{ExtendedIterator}} interface. Some of the {{ExtendedIterator}} uses are in the visible graph SPI so this is not just clearing up. Better to build around the concept of "iterators" and have an (extended) iterator that provides the delay. i.e. a {{LazyIterator}} which internally delays is cleaner IMO because it encapsulates the supplier in a class, not a general interface. So minimal change: {{public LazyIterator(Supplier<ExtendedIterator<T>>)}} rather than LazyIterator being abstract with {{create()}}. {{Supplier<>.get()}} is called when {{lazy()}} is called. Then have {{create() { return supplier.get();} }}. Fixing up {{LazyIterator}} is a point-wise issue, especially as {{LazyIterator}} isn't currently in-use. I'm unclear about the idea of an epic for iterators in general. If it is all (Extended)Iterators, it sounds like a major undertaking with wide repercussions yet there is no obvious benefit driven by changes to a class not in use. If the "epic" is for LazyIterator, I don't care. Or remove LazyIterator from jena-core and take the code where it is wanted. ---- Minor observations: {{LazyIterator}} delays until first call, typically {{hasNext}] or {{next}} ; {{andThen(Supplier<ExtendedIterator<T>>)}} delays only until creation of the "andThen" step. That's not quite the same. (Note the {{Supplier}} generic signature.) {{LazyIterator}} already has "andThen", but it's got the wrong signature, so that leaves toSet and toList. If {{LazyIterator}} becomes concrete, then that needs fixing. As a abstract class leaving toSet and toList ("terminal operations") to the concrete implementation makes sense to me but if someone wants to make {{LazyIterator}} concrete, they will be needed. Or extend {{NiceIterator<T>}}. > LazyIterator > ------------ > > Key: JENA-966 > URL: https://issues.apache.org/jira/browse/JENA-966 > Project: Apache Jena > Issue Type: Bug > Components: Core > Affects Versions: Jena 3.0.0 > Reporter: Claude Warren > Assignee: Claude Warren > > LazyIterator is an abstract class. The documentation indicates that the > create() method needs to be overridden to create an instance. From this I > would expect that > now LazyIterator(){ > @Override > public ExtendedIterator<Model> create() { > ... > }}; > Would work however LazyIterator does not override: > remoteNext(), andThen(), toList(), and toSet(). > I believe these should be implemented in the class. -- This message was sent by Atlassian JIRA (v6.3.4#6332)