0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Сортировка списков - один из ярких примеров использования лямбда-функций и их преимущества перед другими способами. Лямбда-функции позволяют спрятать процесс перебора элементов внутрь метода сортировки, оставив программисту задачу реализации способа сравнения двух элементов. В этом уроке мы научимся сортировать списки по произвольным условиям, используя метод sort() списков.</p>
1
<p>Сортировка списков - один из ярких примеров использования лямбда-функций и их преимущества перед другими способами. Лямбда-функции позволяют спрятать процесс перебора элементов внутрь метода сортировки, оставив программисту задачу реализации способа сравнения двух элементов. В этом уроке мы научимся сортировать списки по произвольным условиям, используя метод sort() списков.</p>
2
<p>Обычная сортировка списка в естественном порядке сводится к вызову одного метода:</p>
2
<p>Обычная сортировка списка в естественном порядке сводится к вызову одного метода:</p>
3
<p>Предположим, что мы хотим выполнить сортировку на основе длины слов в порядке возрастания. Что нам делать в этом случае? Без использования лямбда-функций у нас есть два варианта:</p>
3
<p>Предположим, что мы хотим выполнить сортировку на основе длины слов в порядке возрастания. Что нам делать в этом случае? Без использования лямбда-функций у нас есть два варианта:</p>
4
<ul><li>Реализовать сортировку самостоятельно. Самый дорогой способ, так как требует постоянно реализовывать заново один и тот же алгоритм сортировки.</li>
4
<ul><li>Реализовать сортировку самостоятельно. Самый дорогой способ, так как требует постоянно реализовывать заново один и тот же алгоритм сортировки.</li>
5
<li>Воспользоваться механизмом<a>Comparator</a>, который позволяет создать отдельный класс с логикой сортировки. Объект этого класса будет использоваться во время сортировки для сравнения элементов. Лучше, чем первый способ, но все еще очень многословный.</li>
5
<li>Воспользоваться механизмом<a>Comparator</a>, который позволяет создать отдельный класс с логикой сортировки. Объект этого класса будет использоваться во время сортировки для сравнения элементов. Лучше, чем первый способ, но все еще очень многословный.</li>
6
</ul><p>Лямбда-функции позволяют отделить алгоритм сортировки от логики сравнения элементов, как во втором варианте, но сама реализации логики сравнения значительно упрощается, так как вместо создания целого класса, достаточно описать лямбда-функцию, прямо во время сортировки.</p>
6
</ul><p>Лямбда-функции позволяют отделить алгоритм сортировки от логики сравнения элементов, как во втором варианте, но сама реализации логики сравнения значительно упрощается, так как вместо создания целого класса, достаточно описать лямбда-функцию, прямо во время сортировки.</p>
7
<p>Лямбда-функция, передаваемая в метод sort(), принимает на вход два элемента в том порядке, в котором они идут в исходном списке. Если элементы равны между собой, то функция должна вернуть 0, если первый элемент меньше чем второй, то -1, если второй меньше чем первый, то 1.</p>
7
<p>Лямбда-функция, передаваемая в метод sort(), принимает на вход два элемента в том порядке, в котором они идут в исходном списке. Если элементы равны между собой, то функция должна вернуть 0, если первый элемент меньше чем второй, то -1, если второй меньше чем первый, то 1.</p>
8
<p>В случае примитивных типов данных, такую логику не нужно реализовывать самостоятельно, она уже реализована в методах Character.compare(), Integer.compare() и так далее. В примере выше как раз используется последний. При этом, если мы хотим поменять направление сортировки, то достаточно поменять местами аргументы:</p>
8
<p>В случае примитивных типов данных, такую логику не нужно реализовывать самостоятельно, она уже реализована в методах Character.compare(), Integer.compare() и так далее. В примере выше как раз используется последний. При этом, если мы хотим поменять направление сортировки, то достаточно поменять местами аргументы:</p>
9
<p>Даже в случае объектов, сортировка почти всегда сводится к сравнению примитивных типов данных. Ниже пример сортировки пользователей по возрасту:</p>
9
<p>Даже в случае объектов, сортировка почти всегда сводится к сравнению примитивных типов данных. Ниже пример сортировки пользователей по возрасту:</p>
10
<p>Для полноты картины и понимания статей в интернете, рассмотрим альтернативный вариант сортировки, который делает то же самое что и примеры выше, но с применением встроенного класса Comparator:</p>
10
<p>Для полноты картины и понимания статей в интернете, рассмотрим альтернативный вариант сортировки, который делает то же самое что и примеры выше, но с применением встроенного класса Comparator:</p>
11
<p><a>Comparator.comparingInt()</a>принимает на вход лямбда-функцию, которая принимает на вход сравниваемые данные и должна вернуть числовое значение, полученное на базе этих данных для сравнения.</p>
11
<p><a>Comparator.comparingInt()</a>принимает на вход лямбда-функцию, которая принимает на вход сравниваемые данные и должна вернуть числовое значение, полученное на базе этих данных для сравнения.</p>