База знаний Бинариум

Stream API в Java для начинающих: filter, map, collect

Stream API в Java

Отобрать активных клиентов, отсортировать по сумме покупок и взять первые десять — в классическом стиле это цикл с условиями и временными списками. Со Stream API — одна понятная цепочка.

Б

Редакция Бинариума

Пишем о профессиях в дизайне, BIM и IT · 7 минут чтения

Что такое стрим

Стрим — конвейер обработки данных: элементы коллекции по очереди проходят через цепочку операций — фильтрацию, преобразование, сортировку — и в конце собираются в результат.

Стрим не меняет исходную коллекцию и выполняется только тогда, когда в конце цепочки есть терминальная операция.

Основные операции

ОперацияТипЧто делает
filterПромежуточнаяОставляет элементы по условию
mapПромежуточнаяПреобразует каждый элемент
sortedПромежуточнаяСортирует
limitПромежуточнаяБерёт первые N
collectТерминальнаяСобирает в список, множество, словарь
count, sumТерминальнаяСчитает результат
forEachТерминальнаяВыполняет действие для каждого

Было и стало

Цикл:

List<String> result = new ArrayList<>();
for (Client c : clients) {
  if (c.isActive()) result.add(c.getName());
}
Collections.sort(result);

Стрим:

List<String> result = clients.stream()
    .filter(Client::isActive)
    .map(Client::getName)
    .sorted()
    .toList();

Группировка клиентов по городу:

Map<String, List<Client>> byCity = clients.stream()
    .collect(Collectors.groupingBy(Client::getCity));

Курс Бинариума

Java-разработчик с нуля — коллекции и современный синтаксис

Подробнее

Частые ошибки

  • Забыли терминальную операцию — стрим ничего не делает.
  • Переиспользование стрима — его можно пройти только один раз.
  • Изменение внешних переменных внутри лямбд — источник трудноуловимых ошибок.
  • Слишком длинные цепочки — иногда обычный цикл читается проще.

Главное

  • Стрим — конвейер операций над элементами коллекции.
  • Промежуточные операции настраивают обработку, терминальная запускает её.
  • filter, map, sorted и collect закрывают большинство задач.
  • Используйте стримы там, где они делают код понятнее.

Частые вопросы

Стримы быстрее циклов?

Не обязательно. Их главное преимущество — читаемость, а не скорость.

Что такое Client::getName?

Ссылка на метод — короткая запись лямбды c -> c.getName().

Курс Бинариума

Java-разработчик с нуля

Освойте современный Java на практических задачах.

  • 11 недель обучения
  • 10+ практических работ
  • Проект на GitHub
11.11.2026
Читайте также