Java: Списки
Теория: Сортировка списков
Отдельным пунктом в работе с коллекциями стоит сортировка. В отличие от собеседований, где просят реализовать разные виды сортировки для проверки алгоритмических навыков, в реальной жизни сортировку самостоятельно не реализуют. В Java встроены все необходимые элементы для реализации сортировок любой сложности.
Простая сортировка
Самый простой способ отсортировать коллекцию по возрастанию — это воспользоваться методом Collections.sort(). Этот метод принимает на вход коллекцию и меняет ее напрямую.
Эта сортировка работает с примитивными типами и сортирует значения с учетом естественного порядка по возрастанию. Под естественным порядком понимается движение от меньшего числа к большему. В случае строк это сортировка в лексиграфическом порядке, который в большинстве случаев совпадает с алфавитным порядком.
Сортировка по условию
Сортировка может быть не только в прямом порядке, но и обратном. Кроме того, нам могут понадобиться разные условия сортировки, например без учета регистра, по какому-то конкретному свойству объекта и так далее. Для реализации подобных сортировок в Collections добавлен метод sort() с двумя параметрами. Второй параметр нужен для передачи Comparator, объект, который определяет то, как выполняется сравнение элементов. Вот как с его помощью выполняется обратная сортировка:
А вот сортировка без учета регистра:
Сортировка объектов
Для сортировки объектов нужно явно указывать то как выполнять сортировку, так как, в отличии, от тех же чисел, не существует универсального способа сортировки объектов. Например, пользователей на сайте можно выводить по возрасту, по дате регистрации или количеству пройденных курсов.
Java предоставляет удобный способ выполнять такую сортировку с помощью лямбда-функций. На текущий момент мы их еще не изучали, поэтому код здесь дается просто для примера, подробно про него мы поговорим в следующих курсах.
Для более глубокого понимания темы мы рекомендуем просмотреть видео лекцию, которая является дополнительным материалом к данному курсу:
!vimeo!(783303716)


