Я пытался сделать Map.Entry Comparator в Java8 с использованием лямбда-выражений и нашел очень странное поведение.Java 8 Map.Entry компаратор
Map<Integer, String> map = new TreeMap<>();
map.put(1, "Hello");
map.put(3, "zzzz");
map.put(2, "aaaa");
map.put(5, "AAAAA");
map.put(4, "aaaa");
Comparator<Map.Entry<Integer, String>> com = Comparator.comparing(Map.Entry::getValue);
com = com.reversed();
Comparator<Map.Entry<Integer, String>> com2 = Comparator.comparing(Map.Entry::getValue).reversed();
ком работает просто отлично, но com2 содержит misstake "не может решить метод ПолучитьЗначение". И я действительно не знаю, почему? Какие-либо предложения?
P.S. Есть ли способ избежать ввода Map.Entry с Integer, String? Какой-нибудь более короткий путь?
Это, по-видимому, является ограничением того, как компилятор Java передает общие параметры и тип возврата лямбда, поэтому, вероятно, здесь мало что можно сделать. Вы можете дождаться следующей версии компилятора, которая может быть более умной. :) – biziclop