Comparator
Marc Petit-Huguenin
marc at petit-huguenin.org
Mon Jul 15 09:15:33 PDT 2013
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
On 07/15/2013 09:09 AM, Maurizio Cimadamore wrote:
> On 15/07/13 16:53, Marc Petit-Huguenin wrote: 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))
I forgot to tell that I tried this too. It fails with a "error: reference to
comparing is ambiguous", but not with the new "inference loop" error.
Note that ".sorted(Comparator.comparing((Map.Entry<String, Integer> entry) ->
entry.getValue()))" (i.e. without the .intValue()) fails with a similar error.
>
>
>> 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()))
>
- --
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)
iQIcBAEBCAAGBQJR5CAiAAoJECnERZXWan7EQn4QANE0y2m3MwC9WbPpxVcKAq26
W++E2/IOtQhS324TdPjc6hI61WMZ1RbEZp74AP30loqBmNREE6UZa4kXtuqE6kPg
45GIzmSzoY54+9r76sG2ByrhTgQ2pw5lGjIdQln7TjWU1ZgOEr2vnfGtcyC1n3jM
Oii2jlejkG04q+6oOUiEKxW+0jQXhr35puAQi/c1tpzemIfRgwRVYaHiHWiprvI7
Suni2AlaQTNLckdLZIoX79p89SyuSpcQrs3ge978GAp5mdMx7BNRyPQeNpo3wKWk
ZZnmTf7haF/U4+BWct6B8/Oi3lsj69t8hJR3rPXAUunl8Wm9r2u0+e1PDm6okgM0
BdM/0K91h3/E3A+NcH38xrw12SHi+ngRim7iP+AU7Sldvo2P7P85diTm94fJbiIb
GY5x9GAe3/D56X/AfTIi3t0vigepC3N/lxG3/7mD3haHxQMuZC/6hbdb5K7aqhES
FQuj/swWA3Jxp9ww72RVppFht3So4XjcEZss7bVi3T2hhSINBlyWSJByjBkEq8NP
2jyqHazRvlxI17pUDxHcxXvNtsuhdW4qW6u6py3req5d9Q5ZwoDNGd71vRtTjB2d
cSq5X/DSadlphKBbG0KjGvzHIlvHu/vmJg1tc09XDdejos64SKpY801vLDIi0R6i
fIdXhGY8kYiLsmbLYiaN
=Fuli
-----END PGP SIGNATURE-----
More information about the lambda-dev
mailing list