Comparator

Henry Jen henry.jen at oracle.com
Mon Jul 15 09:16:51 PDT 2013


Or use the new static method,

.sorted(Map.Entry<String, Integer>.comparingByValue())

Cheers,
Henry

On Jul 15, 2013, at 9: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