1 added
2 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Начнем с типового примера использования лямбда-функций в Java. Обычно это метод, который работает с коллекцией и выполняет над ней какую-то операцию, основываясь на лямбде, переданной в метод как аргумент. В будущем мы познакомимся с Java Stream API, где этот подход применяется буквально на каждом шагу. А сейчас напишем свою реализацию фильтрации, чтобы собрать все изученное вместе и закрепить.</p>
1
<p>Начнем с типового примера использования лямбда-функций в Java. Обычно это метод, который работает с коллекцией и выполняет над ней какую-то операцию, основываясь на лямбде, переданной в метод как аргумент. В будущем мы познакомимся с Java Stream API, где этот подход применяется буквально на каждом шагу. А сейчас напишем свою реализацию фильтрации, чтобы собрать все изученное вместе и закрепить.</p>
2
<p>Фильтрация - это одна из самых популярных операций над коллекциями. В реальных приложениях постоянно надо удалять из коллекций элементы, которые не соответствуют условиям выборки. Например, мы можем захотеть выбрать только тех пользователей, у которых нет друзей. Как бы мы выполнили эту задачу обычным способом:</p>
2
<p>Фильтрация - это одна из самых популярных операций над коллекциями. В реальных приложениях постоянно надо удалять из коллекций элементы, которые не соответствуют условиям выборки. Например, мы можем захотеть выбрать только тех пользователей, у которых нет друзей. Как бы мы выполнили эту задачу обычным способом:</p>
3
<p>Какую бы мы ни взяли задачу, везде будет прослеживаться один и тот же обход коллекции с единственным отличием в том, как выполняется проверка. Очень похоже на сортировку, где сам алгоритм сортировки не меняется, а вот сравнение элементов зависит от того, какой порядок мы хотим получить. Применив такую же логику, мы можем спрятать обход списка, вынеся логику проверки в лямбда-функцию. Тогда на выходе мы получим такое решение:</p>
3
<p>Какую бы мы ни взяли задачу, везде будет прослеживаться один и тот же обход коллекции с единственным отличием в том, как выполняется проверка. Очень похоже на сортировку, где сам алгоритм сортировки не меняется, а вот сравнение элементов зависит от того, какой порядок мы хотим получить. Применив такую же логику, мы можем спрятать обход списка, вынеся логику проверки в лямбда-функцию. Тогда на выходе мы получим такое решение:</p>
4
<p>Фильтрация реализована как статический метод, где первый параметр это коллекция пользователей, второй функция-предикат, задача которой вернуть true или false для проверяемого пользователя. Если возвращается true, то элемент остается в коллекции, если false, то элемент удаляется. В результате возвращается новая коллекция, а старая не меняется. Ниже реализация этого метода.</p>
4
<p>Фильтрация реализована как статический метод, где первый параметр это коллекция пользователей, второй функция-предикат, задача которой вернуть true или false для проверяемого пользователя. Если возвращается true, то элемент остается в коллекции, если false, то элемент удаляется. В результате возвращается новая коллекция, а старая не меняется. Ниже реализация этого метода.</p>
5
<p>Самое необычное в этом коде это Predicate<User>. Здесь мы видим пример использования встроенного в Java функционального интерфейса Predicate<T>, с помощью которого можно создавать функции-предикаты, то есть функции, которые внутри себя выполняют какую-то проверку и возвращают true или false. T означает тип, который на вход принимает функция, в нашем случае это User. В соответствии с интерфейсом Predicate<T>, сама лямбда-функция вызывается через метод test(), куда передается проверяемый в данный момент пользователь.</p>
5
<p>Самое необычное в этом коде это Predicate<User>. Здесь мы видим пример использования встроенного в Java функционального интерфейса Predicate<T>, с помощью которого можно создавать функции-предикаты, то есть функции, которые внутри себя выполняют какую-то проверку и возвращают true или false. T означает тип, который на вход принимает функция, в нашем случае это User. В соответствии с интерфейсом Predicate<T>, сама лямбда-функция вызывается через метод test(), куда передается проверяемый в данный момент пользователь.</p>
6
-
<p>Для более глубокого понимания темы мы рекомендуем просмотреть видео лекцию, которая является дополнительным материалом к данному курсу:</p>
6
+
<p>Для более глубокого понимания темы мы рекомендуем просмотреть видео лекцию, которая является дополнительным материалом к данному курсу.</p>
7
-
<p>!vimeo!(818921738)</p>