> On 14 Jun 2016, at 13:11, Patrick Reinhart <patr...@reini.net> wrote:
> 
> Hi Paul,
> 
> I see the point, that making it too easy there.  I might have to some
> little explain where I have started from. I wanted to go over all
> resource URL's from a ClassLoader and read them as a Stream:
> 
> Enumeration<URL> resources =
> myInstance.getClassLoader().getResources("resource.name");
> Collections.list(resources).stream()....
> 
> Which will internally copy all elements right away into an ArrayList and
> does more than I wanted... :-)
> 

Right. A Spliterator from an Iterator will only copy elements (a prefix of 
increasing size) when splitting.


> So, with that your good reasons in mind, in my case leaded me in a wrong
> solution in the first attempt too - thanks good I looked into the source
> code ;-)
> 
> In my case then is the used approach to get a Stream correct?
> 

Almost:

- you can use Enumeration.asIterator() rather than creating your own.

- I don’t think you can assume the Iterator has an encounter order (even though 
there is a form of order related to class loader hierarchy, i.e. you cannot 
assume resources from a particular class loader are presented in any particular 
order, it might depend on how the zip/jar was created or the order in which 
resources are presented in the JDK image, which IIRC the order might optimized 
for booting up).

I had marked ClassLoader as an area to use Stream (we went through a bunch of 
areas that return Enumeration and add Stream-based methods e.g. 
NetworkInterface) but we held off because Jigsaw was doing a lot of plumbing 
work.

It might be possible to revisit, it’s the type of enhancement we could get a 
Feature Complete (FC) extension for. I cannot promise anything here, but if you 
are looking for something to contribute that may be a good area of focus on now 
Jigsaw is settling down.

Paul.

Reply via email to