RFR 8163798: Add a versionedStream method to JarFile

Tagir Valeev amaembo at gmail.com
Fri Aug 26 05:16:46 UTC 2016


Hello!

Small nitpick:

versionsMap.keySet().forEach(v -> {
    Stream<String> names = versionsMap.get(v).stream().map(nm -> nm.name);
    if (v == versionMajor) {
        // add all entries of the version we are interested in
        finalNames.addAll(names.collect(Collectors.toSet()));
    } else {
        // add resource entries found in lower versioned directories
        finalNames.addAll(names.filter(nm -> nm.endsWith(".class") ? false
: true)
                .collect(Collectors.toSet()));
    }
});

I suggest to replace with

versionsMap.forEach((v, list) -> {
  Stream<String> names = list.stream().map(nm -> nm.name);
  if (v != versionMajor) {
    names = names.filter(nm -> !nm.endsWith(".class"));
  }
  names.forEach(finalNames::add);
});

This is cleaner and somewhat faster to use Map.forEach as you don't need to
lookup every map entry.

Also I don't see why "nm -> nm.endsWith(".class") ? false : true" could be
better than
"nm -> !nm.endsWith(".class")". Probably a matter of style though.

Finally there's no need to collect into intermediate set just to add this
set into finalNames.
Instead you can drain the stream directly to finalNames via forEach.

Probably it should be explicitly noted in spec that the resulting stream is
unordered (or at least may
be unordered) as it's created from the Set.

With best regards,
Tagir Valeev

On Fri, Aug 26, 2016 at 2:30 AM, Steve Drach <steve.drach at oracle.com> wrote:

> Hi,
>
> Please review this changeset that adds a versionedStream method to JarFile.
>
> webrev: http://cr.openjdk.java.net/~sdrach/8163798/webrev.00/ <
> http://cr.openjdk.java.net/~sdrach/8163798/webrev.00/>
> issue: https://bugs.openjdk.java.net/browse/JDK-8163798 <
> https://bugs.openjdk.java.net/browse/JDK-8163798>
>
> Thanks
> Steve
>
>
>


More information about the core-libs-dev mailing list