Open
Description
The current Tuple.collectors()
implementation is a canonical one, where collectors are completely independent of one another. It would be better if they could share state in case they're related. For example, when calculating a set of percentiles:
var percentiles =
Stream.of(1, 2, 3, 4, 10, 9, 3, 3).collect(
Tuple.collectors(
Agg.<Integer>percentile(0.0),
Agg.<Integer>percentile(0.25),
Agg.<Integer>percentile(0.5),
Agg.<Integer>percentile(0.75),
Agg.<Integer>percentile(1.0)
)
);
System.out.println(percentiles);
It would be great if the 5 collectors could somehow share their internal state, which is a sorted list of all values in the stream. Executing 1 sort instead of 5 is definitely preferrable.
This can be implemented in 2 ways:
- Optimising for specific collector usage
- Optimising this in general