Класс Comparator
Класс Comparator представляет собой функциональный интерфейс,
который задает правило сравнения двух объектов одного типа.
Он часто применяется для сортировки коллекций и массивов,
когда нужно задать порядок, отличный от естественного.
В методе compare мы передаем два объекта:
первый - сравниваемый объект, второй - объект, с которым сравнивают.
Метод возвращает отрицательное число, если первый объект меньше второго,
ноль - если объекты равны, и положительное число, если первый объект больше второго.
Синтаксис
Comparator<T> comparator = (a, b) -> {
return ...;
};
// или через анонимный класс
Comparator<T> comparator = new Comparator<T>() {
public int compare(T a, T b) {
return ...;
}
};
Пример
Давайте отсортируем список чисел по возрастанию,
используя Comparator:
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>(List.of(3, 1, 4, 2, 5));
Comparator<Integer> comparator = (a, b) -> a - b;
list.sort(comparator);
System.out.println(list);
}
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте отсортируем список строк по убыванию длины,
используя Comparator:
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
public class Main
{
public static void main(String[] args)
{
List<String> list = new ArrayList<>(List.of("abcde", "ab", "abc", "a", "abcd"));
Comparator<String> comparator = (a, b) -> b.length() - a.length();
list.sort(comparator);
System.out.println(list);
}
}
Результат выполнения кода:
["abcde", "abcd", "abc", "ab", "a"]
Пример
Давайте используем статический метод comparing
для сортировки списка строк по алфавиту:
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
public class Main
{
public static void main(String[] args)
{
List<String> list = new ArrayList<>(List.of("abcde", "ab", "abc", "a", "abcd"));
Comparator<String> comparator = Comparator.comparing(s -> s);
list.sort(comparator);
System.out.println(list);
}
}
Результат выполнения кода:
["a", "ab", "abc", "abcd", "abcde"]
Смотрите также
-
метод
compare,
который сравнивает два объекта -
метод
comparing,
который создает компаратор по ключу -
метод
naturalOrder,
который возвращает компаратор естественного порядка -
метод
reversed,
который меняет порядок сортировки на обратный