Comparable.compareTo()
Задаёт естественный порядок объектов класса — по нему работают sort() и TreeSet.
Доступно с: Java 1.2
Синтаксис
int compareTo(T o)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| o | T | Объект, с которым сравнивается текущий. |
Возвращаемое значение
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 и сортировка по нескольким полям.