Java: Списки
2026-02-26 22:49 Diff

Все операции над списками можно свести к трем основным типам:

  • Отображение.
  • Фильтрация.
  • Агрегация.

Для примеров в этом уроке мы будем использовать класс User с таким определением:

Отображение (map)

Отображение — это операция, в которой на основе одного списка, формируется другой, с таким же количеством элементов. Например, у нас есть список пользователей, из которого мы хотим получить список возрастов этих пользователей для каких-то дальнейших вычислений или формирования данных по запросу. Ниже код, выполняющий эту задачу:

Фильтрация (filter)

Фильтрация — это операция, в результате которой на основе одного списка, формируется другой, с элементами, соответствующими условию фильтрации. Например, мы хотим сформировать список пользователей, которые родились после 2000 года.

Фильтрация в чистом виде работает так:

  • Новый список по размеру либо такой же, как и исходный, либо меньше, вплоть до того, что он может быть пустым.
  • Фильтрация не меняет сами элементы, она только убирает неподходящие. Изменение элементов возможно только тогда, когда фильтрация объединена — например, с отображением.

Агрегация

Агрегация — это операция нахождения какого-то значения, вычисленного на основе анализа всей коллекции. К агрегирующим операциям традиционно относят:

  • Нахождение максимального или минимального значения
  • Нахождение суммы
  • Нахождение среднего значения и медианы

Но агрегация не ограничивается только такими операциями. Более того, результатом агрегации может быть сложная структура, а не простое значение. Например, мы можем захотеть сгруппировать всех пользователей по году рождения. Несмотря на различия, все эти операции сводятся к полному анализу элементов коллекции, так как результат агрегирующей операции зависит от каждого элемента.

Для примера посчитаем самый ранний год рождения: