Comparators.comparing overloads
Ali Ebrahimi
ali.ebrahimi1781 at gmail.com
Sun Jul 21 17:29:04 PDT 2013
With my proposed approach for Comparators.comparing(x -> 0); int wins over
other primitives(long and double).
On Mon, Jul 22, 2013 at 4:06 AM, Sam Pullara <spullara at gmail.com> wrote:
> I'm not even sure it is just the boxed/unboxed. The error message
> indicates it is confused with the long and double version as well.
>
> Sam
>
> On Jul 21, 2013, at 2:40 PM, Ali Ebrahimi <ali.ebrahimi1781 at gmail.com>
> wrote:
>
> > Hi,
> > if we make compiler smarter and always primitives functional descriptors
> > wins over boxed (& Refference)
> > functional descriptors in that case we can disambiguate this case. With
> > this approach we don't need to mangle method names(just one map with
> > overloads).
> >
> >
> > On Mon, Jul 22, 2013 at 1:46 AM, Richard Warburton <
> > richard.warburton at gmail.com> wrote:
> >
> >> Hi,
> >>
> >> We only mangle the name for return types, not argument types.
> >>>
> >>
> >> Thanks for the prompt reply.
> >>
> >> Things still seem a little messy in this situation though. Perhaps I've
> >> missed something but we're talking about needing a cast for
> >> any keyExtractor function that returns a number. That seems to be a
> fairly
> >> common scenario for a keyExtractor. Suppose I want to sort Strings by
> >> length, and I want to write:
> >>
> >> Comparator<String> comparator = comparing(String::length);
> >>
> >> I'll get an error telling me that the "reference to comparing is
> >> ambiguous". Now in fact I can't even hint to the compiler using a
> return
> >> type cast as with the following snippet:
> >>
> >> Comparator<String> comparator = comparing(str -> (int) str.length());
> >>
> >> I presume this is because a cast to int can auto-box to Integer which
> >> subtypes Object, so its still ambiguous between Function and
> ToIntFunction.
> >> Again, perhaps I've missed something here, but the way to get around
> this
> >> issue is by providing an explicit type for the keyExtractor function:
> >>
> >> ToIntFunction<String> lengthOfString = String::length;
> >> Comparator<String> comparator = comparing(lengthOfString);
> >>
> >> Which really does seem less elegant to me than having overloads with
> >> mangled names. As I say this isn't a weird corner case - numbers are an
> >> obvious thing to use as a comparator key.
> >>
> >> regards,
> >>
> >> Dr. Richard Warburton
> >>
> >> http://insightfullogic.com
> >> @RichardWarburto <http://twitter.com/richardwarburto>
> >>
> >>
> >
>
>
More information about the lambda-dev
mailing list