РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
356 of 1163 menu

Метод thenComparing

Метод thenComparing класса Comparator позволяет объединить два компаратора в один составной компаратор. Сначала сравнение выполняется текущим компаратором, и если элементы оказались равными, то применяется второй компаратор. В первый параметр мы передаем другой компаратор, во второй (необязательный) - функцию извлечения ключа, по которому будет происходить сравнение, а в третий (необязательный) - компаратор для сравнения извлеченных ключей.

Синтаксис

comparator.thenComparing(otherComparator) comparator.thenComparing(keyExtractor, [keyComparator])

Пример

Давайте отсортируем список чисел сначала по четности, а затем по возрастанию, если четность совпадает:

import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> list = List.of(5, 2, 4, 1, 3); Comparator<Integer> byEven = (a, b) -> Integer.compare(a % 2, b % 2); Comparator<Integer> byValue = (a, b) -> Integer.compare(a, b); List<Integer> res = list.stream() .sorted(byEven.thenComparing(byValue)) .toList(); System.out.println(res); } }

Результат выполнения кода:

[2, 4, 1, 3, 5]

Пример

Давайте отсортируем список строк сначала по длине, а затем по алфавиту с помощью компаратора, созданного через comparing:

import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = List.of("abcde", "ab", "abc", "a", "abcd"); Comparator<String> comparator = Comparator .comparing(String::length) .thenComparing(Comparator.naturalOrder()); List<String> res = list.stream() .sorted(comparator) .toList(); System.out.println(res); } }

Результат выполнения кода:

[a, ab, abc, abcd, abcde]

Пример

Давайте отсортируем список строк по длине с помощью функции извлечения ключа, переданной вторым параметром:

import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = List.of("abcde", "ab", "abc", "a", "abcd"); Comparator<String> comparator = Comparator .comparing(String::length) .thenComparing(s -> s); List<String> res = list.stream() .sorted(comparator) .toList(); System.out.println(res); } }

Результат выполнения кода:

[a, ab, abc, abcd, abcde]

Смотрите также

  • класс Comparator,
    который используется для сравнения объектов
  • метод comparing,
    который создает компаратор по ключу
  • метод reversed,
    который меняет порядок сортировки на обратный
  • метод naturalOrder,
    который возвращает компаратор естественного порядка
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить