Collectors inventory

Brian Goetz brian.goetz at
Thu Jun 13 11:21:57 PDT 2013

>    - String-specific reductions
>      - concatenating()
>      - joining x2: delimiter [, prefix, suffix ]

Should we find a name other than joining?  "join" has a very database-y 
feel to it, and in fact we might want to support some sort of joining in 
the future?

They could all be called concatenating.

>    - Reductions:
>      - reducing x3: reducer [, identity [, mapper ] ]
>      - minBy(comparator)
>      - maxBy(comparator)

Also to discuss: the no-identity version of reducing, as well as 
min/max, could now return Optional (they couldn't before.)  While the 
likelihood of them actually being applied to an empty stream is 
considerably lower than for the corresponding methods on Stream (because 
these methods are mostly for use as downstream reducers for things like 
groupingBy), it is possible that a user will use them directly. 
Currently they return null for empty streams.

It seems "obvious" that we should make these bear Optional, but it also 
seems a shame, as this will impose a dramatic performance cost on any 
groupBy operation that uses them, because it means that every groupBy 
using them will be followed by a (sequential) Map.replaceAll.  So the 
combination of "higher cost" and "wouldn't ever happen in that case 
anyway" gives me some pause.

More information about the lambda-libs-spec-observers mailing list