Comparator::comparing
принимает два общих параметра T
и U
:
static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T, ? extends U> var0)
, и вы передаете один. Первый параметр - это тип объекта, который вы сравниваете, а второй - какое свойство вы сравниваете. Попробуйте это:
Comparator<Pair<String, Integer>> pairComparator = Comparator.<Pair<String, Integer>, String>comparing(Pair::getKey).thenComparingInt(Pair::getValue);
entries.sort(pairComparator);
А также я бы не рекомендовал использовать для этой цели Pair
форму класса JavaFX и использовать AbstractMap.SimpleEntry
, например:
public static void main(String[] args) {
List<AbstractMap.SimpleEntry<String, Integer>> entries = new ArrayList<>();
entries.add(new AbstractMap.SimpleEntry<String, Integer>("C", 20));
entries.add(new AbstractMap.SimpleEntry<>("C++", 10));
//...
Comparator<AbstractMap.SimpleEntry<String, Integer>> simpleEntryComparator = Comparator.<AbstractMap.SimpleEntry<String, Integer>, String>comparing(AbstractMap.Entry::getKey).thenComparingInt(AbstractMap.SimpleEntry::getValue);
entries.sort(simpleEntryComparator);
entries.forEach(e -> System.out.println(e.getKey() + " " + e.getValue()));
}