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