Comparator
Zhong Yu
zhong.j.yu at gmail.com
Mon Jul 15 09:15:24 PDT 2013
Auto unboxing is evil all around. I config my IDE to mark it as error.
Do we really need auto unboxing in type inference? It seems like a fringe case.
On Mon, Jul 15, 2013 at 11:09 AM, Maurizio Cimadamore
<maurizio.cimadamore at oracle.com> wrote:
> On 15/07/13 16:53, Marc Petit-Huguenin wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA256
>>
>> Hi,
>>
>> I am trying to use a comparator on a Map.Entry<String, Integer> stream, and I
>> am not sure why this does not compile:
>>
>> .sorted(Comparator.comparing(Map.Entry::getValue))
> This is as expected - the method reference Map.Entry is defined on a
> generic class with unknown parameter types (some Map<K, V>) - therefore
> the compiler needs the info from the target (in a top-down way) in order
> to decide what the method reference looks like. But the target type info
> is incomplete as it depends on inference variables on its own.
>
> So the compiler ends up applying a simpler (arity-based only) check
> during overload resolution - which means the compiler can't really pick
> the right comparing() method ahead of the target-type.
>
> A shorter way to get this to compile should be this:
>
> .sorted(Comparator.comparing(Map.Entry<String, Integer>::getValue))
>
>
> Let me know if that works for you.
>
> Maurizio
>>
>> error: reference to comparing is ambiguous
>> error: incompatible types: Cannot instantiate inference variables T because of
>> an inference loop
>>
>> (interestingly the second error was not present when using a build from last week)
>>
>> These two compile:
>>
>> .sorted(Comparator.comparing((ToIntFunction<Map.Entry<String,
>> Integer>>)Map.Entry::getValue))
>>
>> .sorted(Comparator.comparing((Map.Entry<String, Integer> entry) ->
>> entry.getValue().intValue()))
>>
>> Thanks.
>>
>> - --
>> Marc Petit-Huguenin
>> Email: marc at petit-huguenin.org
>> Blog: http://blog.marc.petit-huguenin.org
>> Profile: http://www.linkedin.com/in/petithug
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.12 (GNU/Linux)
>>
>> iQIcBAEBCAAGBQJR5BrvAAoJECnERZXWan7Em7UP/1YH+kupYW2bcANs+BrfgbdW
>> npniz63F1GDjWC9IqAd0FREGXEcoAqQCYN3r292APQ4kirSxP4imV8LC9Gof86B/
>> VGNoxMLpxIxAELWA6Ps1EANFypFf19Rot1fCAAcKBqon4gGBf/IC+BhOkydtnm74
>> FVOytk8jkjSWz8DikZ7Z48xBVcR6wMQrPAjh/II0zMt+gqXZY1nLeFFEoaQJDyHs
>> u4wxySolO7BrF63s/mxz89PuxLA5vuEMVdehTOgcvz3QZu2KZJ+gk7Y96PZOMdoU
>> eMGfpIPxNlab5pRJXPoHn7XiiWPo+VKHs7SkInhqU49HL/uFNZjdn+rH1gbN4M7H
>> sn6rMt1b9+BNVad8mlMwby5REE1+qoC9ActisEQlHKlwc+W1Suz+oKjfBWhzjQmv
>> tHvhaTscSFwY0SewR1D3YaCBAcGllUU0078yWqTCRHeTVmuCjfqDAMTPn515tVsr
>> Rds4uIdESoBY3kDc3OazZEKO9TD7OdsSuhAMeIv7aooNQqtQ1JlC93D8od8lXfC1
>> 25/Tyt6WXT1pp1TMURvzIw2YNgLXrTWi1wjQaQm5yqeBgfcKdPGbjzyYbAaQlA1i
>> PiGPfyIyg/GtTGeyO4M8mgbAo/p0w2PQU0iK+oQDWDEoKDt1wQNZMLf6VzQSpKqm
>> /1syZfGWNEl3J7fuvh/o
>> =h+Kp
>> -----END PGP SIGNATURE-----
>>
>
>
More information about the lambda-dev
mailing list