Операция filter()
(фильтрация) позволяет отсеивать элементы из потока данных на основе заданных критериев. Фильтрация пожалуй самая популярная операция в программировании. Разберем ее на примере отбора четных чисел. Как бы мы выполнили эту операцию без стримов:
var numbers = List.of(1, 2, 3, 4, 5, 6);
// Список для хранения четных чисел
var evenNumbers = new ArrayList<>();
// Цикл для отбора четных чисел
for (var number : numbers) {
if (number % 2 == 0) {
evenNumbers.add(number);
}
}
System.out.println(evenNumbers); // Вывод: [2, 4, 6]
В отличие от операции отображения, фильтрация не выполняет преобразования элемента, она лишь вычисляет необходимость добавить это значение в результирующую коллекцию. Лямбда-функция в этом случае называется предикатом, так как ее задача вернуть булево значение. Если значение нужно добавить в новую коллекцию, тогда возвращается true
, иначе false
. Стримы позволяют выразить эту операцию в одну строчку:
var numbers = List.of(1, 2, 3, 4, 5, 6);
// Фильтрация для выбора только четных чисел
var evenNumbers = numbers.stream()
.filter(number -> number % 2 == 0)
.toList();
System.out.println(evenNumbers); // Вывод: [2, 4, 6]
Фильтрация всегда возвращает неизмененные элементы, но их количество может быть любым, включая все элементы исходной коллекции если они все удовлетворяют предикату и не включая никакие элементы в обратной ситуации. Тогда возвращается пустая коллекция.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.