Что такое Stream API?

«Что такое Stream API?» — вопрос из категории Java, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Stream API — это абстракция, представленная в Java 8, для декларативной обработки последовательностей данных (коллекций, массивов, I/O каналов) в функциональном стиле. Основная цель — упростить и сделать более читаемыми операции фильтрации, преобразования, агрегации данных.

Ключевые особенности:

  • Не хранит данные. Stream — это не структура данных, а конвейер для вычислений над источником.
  • Ленивые вычисления. Промежуточные операции (например, filter, map) выполняются только при вызове терминальной операции (например, collect).
  • Возможность параллельной обработки. Легко переключиться на параллельное выполнение с помощью метода parallelStream().

Пример использования в тестах (например, для фильтрации списка объектов):

List<User> users = Arrays.asList(
    new User("Alice", "admin"),
    new User("Bob", "user"),
    new User("Charlie", "admin")
);

// Получить список имен всех администраторов
List<String> adminNames = users.stream()
    .filter(user -> "admin".equals(user.getRole())) // Промежуточная операция: фильтрация
    .map(User::getName)                              // Промежуточная операция: преобразование
    .collect(Collectors.toList());                   // Терминальная операция: сбор результата

System.out.println(adminNames); // [Alice, Charlie]

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

  • Промежуточные (Intermediate): filter, map, sorted, distinct, limit. Возвращают новый Stream.
  • Терминальные (Terminal): forEach, collect, reduce, count, anyMatch. Запускают выполнение конвейера и возвращают результат или side-effect.