Gymterview
junior

Что такое Stream?

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

Аналогия из жизни: стрим — это конвейерная лента на заводе. Детали (элементы) движутся по ленте и проходят через станции (операции): фильтрацию, обработку, сортировку. Лента не хранит детали — она их перемещает и обрабатывает.

Ключевые свойства

  • Операции бывают промежуточные (intermediate) и конечные (terminal)
  • Промежуточные операции выполняются лениво — до вызова конечной операции ничего не происходит
  • Стрим одноразовый — после терминальной операции использовать повторно нельзя
  • Стрим не модифицирует источник данных

Примитивные стримы

Для типов int, long и double существуют специализированные стримы: IntStream, LongStream и DoubleStream. Они избегают автобоксинга и предоставляют дополнительные методы: sum(), average(), mapToObj().

Пример
List<String> names = List.of("Alice", "Bob", "Charlie");
names.stream()
    .filter(name -> name.length() > 3)
    .map(String::toUpperCase)
    .forEach(System.out::println); // ALICE, CHARLIE

На собеседовании: обязательно упомяните ленивость выполнения (lazy evaluation) и одноразовость стрима. Также важно различать промежуточные и конечные операции — промежуточные возвращают стрим, конечные — результат или void.