Ответ
Нет, класс Integer не содержит встроенного экземпляра Comparator как поле. Однако, для сравнения Integer и других Comparable объектов в Java используются статические фабричные методы класса Comparator.
Стандартные компараторы из java.util.Comparator:
// Естественный порядок (сортировка по возрастанию)
Comparator<Integer> naturalOrder = Comparator.naturalOrder();
List<Integer> list = Arrays.asList(3, 1, 2);
list.sort(naturalOrder); // [1, 2, 3]
// Обратный естественному порядку (по убыванию)
Comparator<Integer> reverseOrder = Comparator.reverseOrder();
list.sort(reverseOrder); // [3, 2, 1]
Создание кастомного Comparator (лямбда или методовая ссылка):
// Сортировка по четности (четные числа сначала)
Comparator<Integer> byEven = (a, b) -> {
boolean aEven = a % 2 == 0;
boolean bEven = b % 2 == 0;
if (aEven == bEven) return 0;
return aEven ? -1 : 1;
};
// Сортировка по абсолютному значению (используя метод Math.abs)
Comparator<Integer> byAbs = Comparator.comparingInt(Math::abs);
Почему Comparator — это отдельный объект: Это следует принципу единой ответственности. Класс Integer отвечает за хранение целочисленного значения и базовые операции (compareTo). Comparator — это стратегия сравнения, которую можно динамически подставлять в методы сортировки (Collections.sort, List.sort, Stream.sorted), обеспечивая гибкость.