JDK-8072840: Presizing for Stream Collectors

Fabian Meumertzheim fabian at buildbuddy.io
Wed Feb 12 10:09:45 UTC 2025


As an avid user of Guava's ImmutableCollections, I have been
interested in ways to close the efficiency gap between the built-in
`Stream#toList()` and third-party `Collector` implementations such as
`ImmutableList#toImmutableList()`. I've found the biggest problem to
be the lack of sizing information in `Collector`s, which led to me to
draft a solution to JDK-8072840:
https://github.com/openjdk/jdk/pull/23461

The benchmark shows pretty significant gains for sized streams that
mostly reshape data (e.g. slice records or turn a list into a map by
associating keys), which I've found to be a pretty common use case.

Before I formally send out the PR for review, I would like to gather
feedback on the design aspects of it (rather than the exact
implementation). I will thus leave it in draft mode for now, but
invite anyone to comment on it or on this thread.

Fabian


More information about the core-libs-dev mailing list