One other thing that I've been wondering about is the stream() and entries() methods. Has there been any discussion about these doing filter?
Not that I’m aware of.
Maybe it is too expensive and best left to the user of the API? Part of the context for asking is modular JARs of course.
Perhaps you can elaborate.
Alan’s point is that traversing using entries()/stream() always returns the versioned entries (if any) rather than all entries, thus in a sense filters.
My assumption was the traversal should by default be consistent with a calls to getEntry, thus:
jarFile.stream().forEach(e -> { JarEntry je = jarFile.getJarEntry(e.getName()); assert e.equals(je); });
There might need to be another stream method that returns all entries.
JarFile.entries() and JarFile.stream() return all the entries; they are not filtered. Your example would work if the JarFile is constructed without a Release argument or with the Release.BASE argument. The assertion would fail if it’s constructed with any other Release argument. Adding a filter and a map to the stream pipeline would make your example succeed with all values of Release.