incompatible types compile error

Arul Dhesiaseelan aruld at acm.org
Tue Nov 20 01:06:54 PST 2012


I believe you should still need to add the type parameter in this case.
Some background on this can be found in this thread :
http://mail.openjdk.java.net/pipermail/lambda-dev/2012-May/004951.html

-Arul


On Mon, Nov 19, 2012 at 9:38 PM, Boaz Nahum <boaznahum at gmail.com> wrote:

> But it still fails (b64) even without the comparator
> -------------------------------------------------
>          //http://cr.openjdk.java.net/~briangoetz/lambda/sotc3.html
>
>         List<Shape> blue = shapes.stream()
>             .filter(s -> s.getColor() == Color.BLUE)
>             .into(new ArrayList<>());
>
> -------------------------------------------------------------------------------
> java: incompatible types: java.util.ArrayList<java.lang.Object> cannot be
> converted to java.util.List<soc.Shape>
>
> Is it valid code ? Or should I add the type parameter ?:
> -------------------------------------------------------
>         List<Shape> blue = shapes.stream()
>             .filter(s -> s.getColor() == Color.BLUE)
>             .into(new ArrayList<Shape>());
> -------------------------------------------------------
>
> Thanks
> Boaz
>
>
>
> On Mon, Nov 19, 2012 at 11:36 PM, Arul Dhesiaseelan <aruld at acm.org> wrote:
>
> > Thanks Maurizio for the clarification.
> >
> > For me, the first usage fails to compile as expected. The second usage
> > works perfectly fine, I wonder what is different that make second example
> > work without the type parameter. I tested with today's build.
> >
> >     List<Album> sortedFavs1 = albums.stream()
> >         .filter(a -> a.tracks.stream().anyMatch(t -> (t.rating >= 4)))
> >         .sorted(comparing((Function<Album, Comparable>) album ->
> > album.name
> > ))
> >         .into(new ArrayList<Album>());//java: incompatible types:
> > java.util.stream.Stream.Destination cannot be converted to
> > java.util.List<streams.Album>
> >
> >     List<Album> sortedFavs2 = new ArrayList<Album>();
> >         albums.stream()
> >         .filter(a -> a.tracks.stream().anyMatch(t -> (t.rating >= 4)))
> >         .sorted(comparing((Function<Album, Comparable>) album ->
> > album.name
> > ))
> >         .into(sortedFavs2);
> >
> > Here is the working version with the type parameter.
> >
> >     List<Album> sortedFavs = albums.stream()
> >         .filter(a -> a.tracks.stream().anyMatch(t -> (t.rating >= 4)))
> >         .sorted(comparing((Function<Album, String>) album -> album.name
> ))
> >         .into(new ArrayList<Album>());
> >
> >
> > - Arul
> >
> >
> > On Mon, Nov 19, 2012 at 3:37 AM, Maurizio Cimadamore <
> > maurizio.cimadamore at oracle.com> 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.
> > >
> > > 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