Extending Collector to handle a post-transform

Brian Goetz brian.goetz at oracle.com
Tue Jun 11 15:26:52 PDT 2013


> OK, scratch that. Here's a different approach:

> For example,
>
> /** Passed to Stream methods by client code */
> public interface Collector<T, R> {
>      <X> Tuple<T, X, R> asTuple();
>
>      /** Called on by Stream implementations to perform collection
> process */
>      interface Tuple<T, X, R> {
>          Supplier<X> resultSupplier();
>          BiFunction<X, T, X> accumulator();
>          BinaryOperator<X> combiner();
>          Function<X, R> transformer();
>          Set<Characteristics> characteristics();
>      }
> }

Right, that's one of the forms of "move the ugly elsewhere."

But really, do you find this:

     public static <T>
     Collector<T, ?, List<T>> toList() { ... }

all that offensive?  If you found that in the javadoc, would it really 
make you wonder what that ? was all about?  Because this is really as 
bad as it gets.



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