Collector / Collectors
Remi Forax
forax at univ-mlv.fr
Thu Jun 20 11:54:00 PDT 2013
On 06/20/2013 06:58 PM, Brian Goetz wrote:
> Spec and implementation:
Brian
if you import java.util.stream.Collectors.CollectorImpl, instead of new
Collectors.CollectorImpl..., you can write
new CollectorImpl..., which is easier to read.
>
> /**
> * Returns a new {@code Collector} described by the given {@code
> supplier},
> * {@code accumulator}, and {@code combiner} functions. The
> resulting
> * {@code Collector} has the {@code
> Collector.Characteristics.IDENTITY_FINISH}
> * characteristic.
> *
> * @param supplier The supplier function for the new collector
> * @param accumulator The accumulator function for the new collector
> * @param combiner The combiner function for the new collector
> * @param <T> The type of input elements for the new collector
> * @param <R> The type of intermediate accumulation result, and
> final result,
> * for the new collector
> * @return the new {@code Collector}
> */
> static<T, R> Collector<T, R, R> of(Supplier<R> supplier,
> BiConsumer<R, T> accumulator,
> BinaryOperator<R> combiner) {
> return new Collectors.CollectorImpl<>(supplier, accumulator,
> combiner, Collectors.CH_ID);
>
> }
>
> /**
> * Returns a new {@code Collector} described by the given {@code
> supplier},
> * {@code accumulator}, {@code combiner}, and {@code finisher}
> functions.
> *
> * @param supplier The supplier function for the new collector
> * @param accumulator The accumulator function for the new collector
> * @param combiner The combiner function for the new collector
> * @param <T> The type of input elements for the new collector
> * @param <A> The intermediate accumulation type of the new collector
> * @param <R> The final result type of the new collector
> * @return the new {@code Collector}
> */
> static<T, A, R> Collector<T, A, R> of(Supplier<A> supplier,
> BiConsumer<A, T> accumulator,
> BinaryOperator<A> combiner,
> Function<A, R> finisher) {
> return new Collectors.CollectorImpl<>(supplier, accumulator,
> combiner, finisher, Collectors.CH_NOID);
> }
cheers,
Rémi
>
>
>
> On 6/20/2013 12:45 PM, Brian Goetz wrote:
>> Several people have suggested adding:
>>
>> Collector.of(supplier, accumulator, combiner)
>> Collector.of(supplier, accumulator, combiner, finisher)
>>
>> which is sensible and easy.
>>
>> On 6/18/2013 11:58 AM, Brian Goetz wrote:
>>> I think I may (finally!) have a final API candidate for Collector /
>>> Collectors. Updated docs here:
>>>
>>> http://cr.openjdk.java.net/~briangoetz/doctmp/doc/
>>>
>>> Salient recent changes:
>>> - Incorporation of finishing function into Collector
>>> - Renamings in Collector API
>>> - Morph toStringBuilder, toStringJoiner into joining()
>>> - Add prefix/suffix version of joining()
>>> - Addition of summingBy{Int,Long,Double}
>>> - Addition of averagingBy{Int,Long,Double}
>>> - Rename toXxxSummaryStatistics to summarizingXxx
>>> - no-see reducing, and minBy/maxBy collectors return Optional
>>> - elimination of canned merger functions from API
>>>
>>> Please review the API and spec. I have set up a SurveyMonkey with the
>>> usual password to collect review comments at:
>>>
>>> https://www.surveymonkey.com/s/3TTBJ7K
>>>
>>>
More information about the lambda-libs-spec-observers
mailing list