junior
В чем разница между Collection и Stream?
Collection и Stream решают принципиально разные задачи, хотя часто работают вместе. Коллекция — это структура данных для хранения и доступа к элементам. Стрим — конвейер для декларативной обработки данных.
| Критерий | Collection | Stream |
|---|---|---|
| Назначение | Хранение и доступ к элементам | Конвейер вычислений |
| Хранение данных | Да, все элементы в памяти | Нет, элементы обрабатываются по мере необходимости |
| Доступ к элементам | Поэлементный (по индексу, итератор) | Только через операции конвейера |
| Повторное использование | Многократное | Одноразовое |
| Модификация | Можно добавлять/удалять элементы | Не модифицирует источник |
| Вычисление | Жадное (eager) | Ленивое (lazy) |
| Бесконечность | Нет | Может быть бесконечным |
Коллекция воплощает идею структуры данных (например, Set гарантирует уникальность), а стрим воплощает идею конвейера, результатом которого может быть коллекция, примитив, Optional или побочный эффект.
На собеседовании: ключевая мысль — коллекция отвечает на вопрос «что хранить», стрим — на вопрос «как обработать». Упоминание ленивого вычисления и одноразовости стрима покажет глубокое понимание.