RFR JDK-8012645: Stream methods on BitSet, Random, ThreadLocalRandom, ZipFile

Henry Jen henry.jen at oracle.com
Tue Apr 30 20:32:16 UTC 2013


That's what it was, but as Alan pointed out, it is potential misleading to people who knows detail about zip file.

I think the ordering is an implementation detail, and based on zip file spec, I would assume it's the order as in central directory.

I didn't dig down to the native code to confirm what ordering have been implemented, so my confidence level is at most be par with Paul. :)

Cheers,
Henry


On Apr 30, 2013, at 12:56 PM, Martin Buchholz <martinrb at google.com> wrote:

> In practice, the order of entries in the central directory is always the
> same as the order of actual entries, although in theory they might be
> different.  I think it would be useful to say that the entries are returned
> in the order that they are stored in the zip file, and leave the central
> directory order subtlety out of it.
> 
> 
> On Tue, Apr 30, 2013 at 12:40 PM, Paul Sandoz <paul.sandoz at oracle.com>wrote:
> 
>> On Apr 30, 2013, at 9:02 PM, Henry Jen <henry.jen at oracle.com> wrote:
>> 
>>> Point taken.
>>> 
>>> It seems to me we should at least keep the ORDERED characterristic for
>> the returned stream, but not necessarily need to specify what order it is,
>> which would be inline with entries().
>>> 
>>> Does that make sense?
>>> 
>>> I'll add back the ORDERED flag but keep the javadoc not mention ordering.
>>> 
>> 
>> Is there any reason why we cannot mention the order is the same as the
>> order declared in the central directory?
>> 
>> Or is that considered an implementation detail? If so it seems like a
>> feature to me we should call out. However, I don't really know much about
>> the zip implementation to say much with confidence on this matter.
>> 
>> Paul.
>> 
>>> Cheers,
>>> Henry
>>> 
>>> On Apr 30, 2013, at 9:35 AM, Paul Sandoz <paul.sandoz at oracle.com> wrote:
>>> 
>>>> On Apr 30, 2013, at 5:43 PM, Henry Jen <henry.jen at oracle.com> wrote:
>>>>> 
>>>>>> So if possible we should report ORDERED and state the association, if
>> any, of encounter order with the order declared in the central directory,
>> which i hope is, and seems to be, the same. (Plus update the docs of
>> entries() too.)
>>>>>> 
>>>>> 
>>>>> I agree with you entries() and streams() should be in sync on
>> ordering. Spec-wise, I have no clear preference.
>>>> 
>>>>> But when I looked into a zip file archive, I always would like to see
>> entries in alphabetic order so I can find the files I really care, which
>> will also have directory structure nicely. Order in central directory not
>> necessary helping me.
>>>>> 
>>>> 
>>>> When you do the following what entry do you think should be returned?
>>>> 
>>>> zipfile.entries().nextElement();
>>>> 
>>>> zipfile.stream().findFirst();
>>>> 
>>>> zipfile.stream().parallel().findFirst();
>>>> 
>>>> I would expect all entries to be equal and to be the first entry in the
>> central directory. I would not expect the latter to be non-deterministic
>> [*].
>>>> 
>>>> Or what about the following:
>>>> 
>>>> List l = new ArrayList(); Enumeration e = zip file.entries();
>>>> for(int i = 0; i < 10 & e.hasMoreElements(); i++)
>> l.add(e.nextElement());
>>>> List ss = zipfile.entries().limit(10).collect(toList());
>>>> List sp = zipfile.entries().parallel().limit(10).collect(toList());
>>>> 
>>>> Should those lists be equal? Again i would expect so.
>>>> 
>>>> There does appear to be a well-defined encounter order. I don't think
>> most developers will consider the collection of zip entries to behave like
>> a Set. It is more list-like.
>>>> 
>>>> Paul.
>>>> 
>>>> [*] Note that our current implementation is deterministic, but that is
>> because we don't currently check when doing a find first if the stream has
>> no order and then defer to find any, which is a minor optimization we can
>> enable.
>>> 
>> 
>> 




More information about the core-libs-dev mailing list