Тип Comparable
Тип Comparable представляет собой интерфейс,
который реализуют объекты, поддерживающие
упорядоченное сравнение с другими объектами
того же типа. Класс, реализующий этот интерфейс,
обязан предоставить метод compareTo,
который принимает один параметр - другой объект
для сравнения - и возвращает целое число.
Если текущий объект меньше переданного, метод
возвращает отрицательное число, если больше -
положительное, а если они равны - ноль.
Тип Comparable является обобщенным
и параметризуется типом сравниваемых объектов.
Например, Comparable<int> означает,
что объект можно сравнивать с целыми числами.
Синтаксис
abstract class Comparable<T> {
int compareTo(T other);
}
Чтобы реализовать тип Comparable в своем
классе, нужно указать его в списке implements
или extends и определить метод compareTo.
Пример
Давайте создадим класс Person, который
реализует Comparable и сравнивает людей
по возрасту:
class Person implements Comparable<Person> {
String name;
int age;
Person(this.name, this.age);
@override
int compareTo(Person other) {
return this.age.compareTo(other.age);
}
}
void main()
{
Person a = Person('Alice', 30);
Person b = Person('Bob', 25);
print(a.compareTo(b));
print(b.compareTo(a));
print(a.compareTo(a));
}
Результат выполнения кода:
1
-1
0
Пример
Давайте отсортируем список объектов, реализующих
Comparable, с помощью метода sort:
class Person implements Comparable<Person> {
String name;
int age;
Person(this.name, this.age);
@override
int compareTo(Person other) {
return this.age.compareTo(other.age);
}
@override
String toString() {
return '$name ($age)';
}
}
void main()
{
List<Person> people = [
Person('Alice', 30),
Person('Bob', 25),
Person('Carol', 35),
];
people.sort();
print(people);
}
Результат выполнения кода:
[Bob (25), Alice (30), Carol (35)]
Пример
Давайте сравним две строки с помощью встроенной
реализации Comparable, которую имеет
класс String:
void main()
{
String a = 'abcde';
String b = '12345';
print(a.compareTo(b));
print(b.compareTo(a));
}
Результат выполнения кода:
48
-48
Метод compareTo возвращает разницу кодов
первых несовпадающих символов, поэтому результат
может быть любым целым числом, а не только
-1, 0 или 1.