Ответ
Нет, исходные данные остаются неизменными. Stream в Java работает по принципу неизменяемого конвейера операций.
Ключевые моменты:
- Stream не модифицирует источник данных (коллекцию, массив и т.д.).
- Все промежуточные операции (
map,filter,sorted) возвращают новый Stream. - Терминальная операция (
collect,forEach) обрабатывает данные, но не изменяет исходную коллекцию.
Пример:
List<String> originalList = Arrays.asList("a", "b", "c");
List<String> result = originalList.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(originalList); // [a, b, c] - исходные данные не изменились
System.out.println(result); // [A, B, C] - новый список
Исключение (плохая практика):
Если в терминальной операции forEach явно модифицировать состояние элементов исходной коллекции, это может привести к изменению данных. Такой подход нарушает принципы функционального программирования и может вызвать проблемы с потокобезопасностью.