On Mon, 14 Sep 2020 21:32:19 GMT, Stuart Marks <sma...@openjdk.org> wrote:

>> Related to [JDK-8252730 jlink does not create reproducible builds on 
>> different
>> servers](https://bugs.openjdk.java.net/browse/JDK-8252730). Introduces 
>> ordering based on `Archive` module names to
>> ensure stable files (and file signatures) across generated JDK images by 
>> jlink.
>
> src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java 
> line 274:
> 
>> 272:                                     e.getResourcePoolEntryName(), e))
>> 273:                             .forEach(resources::add);
>> 274:                 });
> 
> I'm somewhat allergic to nested forEach plus statement lambdas. I note that 
> the original code mixed an imperative
> for-loop with a stream, which was kind of odd; converting to a straight 
> nested for-loop might be reasonable.
> Alternatively, the nested forEaches could be converted to a flatMap as 
> follows:
>         archives.stream()
>                 .map(Archive::moduleName)
>                 .sorted()
>                 .flatMap(mn -> entriesForModule.get(mn).stream()
>                                .map(e -> new ArchiveEntryResourcePoolEntry(mn,
>                                                 e.getResourcePoolEntryName(), 
> e)))
>                 .forEach(resources::add);

This is a good catch. I'm partial to flatMap, but unsure if that gets too 
clever what we're trying to do here or not.

-------------

PR: https://git.openjdk.java.net/jdk/pull/156

Reply via email to