Comparator
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Mon Jul 15 09:09:05 PDT 2013
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