[ 
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)

Reply via email to