Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Comparable.compareTo()

Задаёт естественный порядок объектов класса — по нему работают sort() и TreeSet.

Доступно с: Java 1.2

Синтаксис

int compareTo(T o)

Параметры

ПараметрТипОписание
oTОбъект, с которым сравнивается текущий.

Возвращаемое значение

intОтрицательное число — этот объект меньше, 0 — равны, положительное — больше.

Примеры

Запись с естественным порядком по цене:

record Product(String name, double price) implements Comparable<Product> {
    @Override
    public int compareTo(Product other) {
        return Double.compare(price, other.price);
    }
}
 
void main() {
    var products = new ArrayList<>(List.of(
            new Product("Tea", 4.5),
            new Product("Coffee", 7.0),
            new Product("Water", 1.2)));
    Collections.sort(products);
    products.forEach(p -> IO.println(p.name()));
}

Результат:

Water
Tea
Coffee

Примечания

Используйте Integer.compare(a, b) и Double.compare(a, b) вместо вычитания a - b: вычитание больших чисел переполняется и даёт неверный знак. String, числа-обёртки, LocalDate уже реализуют Comparable.

Если нужно несколько разных порядков (по имени, по цене), класс реализует один Comparable, а остальные задаются через Comparator.

См. также

  • Comparator.comparing() — Создаёт компаратор, который сравнивает объекты по одному полю.
  • String.compareTo() — Сравнивает две строки по алфавиту (лексикографически).
  • implements — Указывает интерфейсы, которые реализует класс.
  • Arrays.sort() — Сортирует массив на месте — по возрастанию или по заданному компаратору.

Вопросы и ответы по теме

В учебнике

  • Сортировка и компараторы — Сортировка коллекций в Java: естественный порядок, обратный порядок, интерфейс Comparable, Comparator.comparing и сортировка по нескольким полям.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.