Sobes.tech
Junior
97
questionbank

Что такое Stream в Java?

Ответ от нейросети

sobes.tech AI

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

Основные характеристики:

  • Не изменяет источник данных: Stream не модифицирует коллекцию или массив, откуда он создан.
  • Выполняется лениво: Промежуточные операции (такие как filter, map) не выполняются немедленно. Выполнение начинается только при вызове терминальной операции (такой как forEach, collect, sum).
  • Может быть использован однократно: После выполнения терминальной операции Stream "закрывается" и не может быть использован повторно.

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

  • Промежуточные (Intermediate): Возвращают новый Stream. Примеры: filter(), map(), sorted(), distinct(), limit(), skip().
  • Терминальные (Terminal): Возвращают результат или побочный эффект и завершают обработку Stream. Примеры: forEach(), collect(), count(), sum(), average(), reduce(), min(), max(), anyMatch(), allMatch(), noneMatch().

Пример использования:

// Создание Stream из списка строк
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

// Промежуточная операция: фильтрация по имени, начинающимся на 'A'
Stream<String> filteredNamesStream = names.stream()
                                          .filter(name -> name.startsWith("A"));

// Промежуточная операция: преобразование всех имен в верхний регистр
Stream<String> upperCaseNamesStream = filteredNamesStream
                                              .map(String::toUpperCase);

// Терминальная операция: вывод отфильтрованных и преобразованных имен
upperCaseNamesStream.forEach(System.out::println);

// Сокращенный вариант с конвейером операций:
names.stream()
     .filter(name -> name.startsWith("A")) // Промежуточная
     .map(String::toUpperCase) // Промежуточная
     .forEach(System.out::println); // Терминальная

Использование Stream API упрощает работу с коллекциями, делая код более читаемым и производительным при распараллеливании.