Peter Levart peter.levart at
Tue Jun 19 07:43:14 UTC 2018

On 06/19/18 02:38, John Rose wrote:
>     unzipping(
> 		Function<? super T, T1> f1,  // defaults to identity
> 		Collector<? super T1, ?, R1> c1,
> 		Function<? super T, T2> f2,  // defaults to identity
> 		Collector<? super T2, ?, R2> c2,
> 		BiFunction<? super R1, ? super R2, ? extends R> finisher) {
>       return toBoth(mapping(f1, c1), mapping(f2, c2));
>    }

You don't need these f1 and f2 as arguments, because we already have a 
Collectors.mapping(f1, c1) combinator. So you can write:

     mapping(f1, c1),
     mapping(f2, c2)

But then unzipping is not really "unzipping".

What's wrong with my initial proposal of Collectors.toBoth()?

We already have some toXxx() methods (toList, toSet, toCollection, 
toMap, ...), so toBoth seems to me as a natural extension of that naming 


But I'm open to other naming suggestions.

I would also call the 3rd parameter 'combiner' rather than 'finisher', 
because finisher is known as particular function that is bound to the 
particular Collector. And this 3rd argument is not the resulting 
collector's finisher - it is just a part of it. The real finisher of the 
resulting Collector is composed of that function and finishers of 
underlying collectors.

Regards, Peter

More information about the core-libs-dev mailing list