Stream.flatMap signature is not correct
Remi Forax
forax at univ-mlv.fr
Sat Dec 1 15:20:18 PST 2012
On 12/01/2012 06:55 PM, Remi Forax wrote:
> On 12/01/2012 06:34 PM, Kevin Bourrillion wrote:
>> On Fri, Nov 30, 2012 at 8:44 PM, Remi Forax <forax at univ-mlv.fr
>> <mailto:forax at univ-mlv.fr>> wrote:
>>
>> Stream.flatMap is currently specified as:
>>
>> <R> Stream<R> flatMap(FlatMapper<? super T, ? extends R> mapper);
>>
>> but should be:
>> <R> Stream<R> flatMap(FlatMapper<? super T, ? super R> mapper);
>>
>>
>> I don't understand. If the mapper produces Numbers how can you
>> return a stream of Integers?
>
> sorry, never send a mail Friday evening.
>
> Rémi
>
BTW, the problem of inference is still present:
Arrays.asList(Object.class, String.class).stream().flatMap(
(block, clazz) -> {
Arrays.asStream(clazz.getFields()).forEach(block); }); // doesn'tcompile
Arrays.asList(Object.class, String.class).stream().flatMap(
(Block<? super Field> block, Class<?> clazz) -> {
Arrays.asStream(clazz.getFields()).forEach(block); }); // Ok
Also note that it doesn't work with the signature (Block<Field>,
Class<?>) because Block<Field> is a subtype of Block<? super Field>.
Rémi
More information about the lambda-libs-spec-observers
mailing list