Я пытаюсь написать следующий код:Тип вывод порвал с беглым API
Map<String, String> m = new HashMap<>();
// ... populate the map
m.entrySet().stream()
.sorted(Comparator.comparing(e -> e.getKey()).reversed())
.forEach(System.out::println);
Это не компилируется, потому что выведенный тип для e
является Object
. Однако, если я удаляю вызов .reversed()
, это делает вывод. Я должен изложить тип для e
, который некрасиво:
.sorted(Comparator.comparing((Map.Entry<String, String> e) -> e.getKey()).reversed())
компилятор может определить тип для Comparator.comparing
, но когда я добавляю reversed()
, она не может. Зачем?
Обычно, Java выводит аргументы типа. Но после добавления 'reverse()', мне нужно явно их записать. Зачем? – Oliv
Я сделал несколько тестов, и когда у вас есть код без 'reverse()', 'Map.Entry :: getKey' разрешен как' (stringStringEntry) -> stringStringEntry.getKey() ', но в случае, если вы его отменили , тот же 'Map.Entry :: getKey' разрешен как' (Функция