incompatible types compile error

Henry Jen henry.jen at oracle.com
Mon Nov 19 21:55:31 PST 2012


On 11/19/2012 05:37 AM, Maurizio Cimadamore wrote:
> The problem is that, since you are using Comparable (note the absence of 
> type-parameters) you are effectively triggering an uunchecked conversion 
> there - the result would be that the erased signature of 'into' will be 
> used instead - that is, the return type of into will be simply 
> Destination - not the type inferred from the argument - hence the 
> incompatible types error.
> 

I don't quite understand this Comparable cause erased signature for into.

Comparators.comparing<Function<Album, ? extends Comparable>> should
return a Comparator<Album> given correct Function type, then in
sorted(Comparator<Album>) should gave a Stream<Album>, isn't the type
obvious?

Apology if this is a dumb question, I don't know how exactly type
inference works. But seems to me, the target type is available. What am
I missing? Thanks in advance.

Cheers,
Henry


> Btw - I'm getting the error for both versions of the example you sent.
> 
> Maurizio
> 
> On 16/11/12 23:01, Arul Dhesiaseelan wrote:
>> This works, btw.
>>
>> List<Album> sortedFavs = new ArrayList<Album>();
>> albums.stream()
>>              .filter(a -> a.tracks.stream().anyMatch(t -> (t.rating >= 4)))
>>              .sorted(comparing((Mapper<Comparable, Album>) album ->
>> album.name))
>>              .into(sortedFavs);
>>
>>
>>
>> On Fri, Nov 16, 2012 at 12:38 PM, Remi Forax <forax at univ-mlv.fr> wrote:
>>
>>> On 11/16/2012 10:57 PM, Arul Dhesiaseelan wrote:
>>>> Hi,
>>>>
>>>> I am trying to run a slightly modified version from the latest State of
>>> the
>>>> Lambda libraries edition.
>>>>
>>>>       List<Album> sortedFavs =
>>>>           albums.stream()
>>>>               .filter(a -> a.tracks.stream().anyMatch(t -> (t.rating >=
>>> 4)))
>>>>               .sorted(comparing((Mapper<Comparable, Album>) album ->
>>>> album.name))
>>>>               .into(new ArrayList<Album>());
>>>>
>>>> java: incompatible types: java.util.stream.Stream.Destination cannot be
>>>> converted to java.util.List<Album>
>>>>
>>>> Any idea what could be wrong here?
>>> the signature of the method into.
>>>
>>>> -Arul
>>>>
>>> Rémi
>>>
>>>
>>>
> 
> 



More information about the lambda-dev mailing list