В коде ниже:Как работает функция Comparator.comparing()?
ForComparatorDemo object1 = new ForComparatorDemo("object-1",5);
ForComparatorDemo object2 = new ForComparatorDemo("object-2",4);
ForComparatorDemo object3 = new ForComparatorDemo("object-3",3);
ForComparatorDemo object4 = new ForComparatorDemo("object-4",4);
List<ForComparatorDemo> objectList = new ArrayList<>();
objectList.add(object1);
objectList.add(object2);
objectList.add(object3);
objectList.add(object4);
Comparator<ForComparatorDemo> comparer = Comparator.comparing(ForComparatorDemo::getAge);
objectList.sort(comparer);
objectList.forEach(object -> System.out.println(object.getName() + " " + object.getAge()));
Я получил этот вывод (что правильно):
объект-3 3
объект-2 4
объект-4 4
объект-1 5
Вопрос в том, как что функция сравнения действительно работает? Порывшись в документации я нашел этот код для Coamparator.comparing (..) функции:
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
{
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}
Не могли бы вы объяснить мне, как эта функция получает эти два значения (c1 и с2) и как это возвращение заявление фактически работает ?
Ну, что я действительно искал, так это то, как эта функция получает аргументы c1 и c2, а ответ на это - из интерфейса List, который я нашел после обработки в документации –
. Я добавил часть об использовании компаратора. – arghtype