Ответ
forEach в Java Stream API является конечным (terminal) методом. Он завершает поток, выполняя действие для каждого элемента, и не возвращает новый Stream.
Пример:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream()
.filter(name -> name.startsWith("A"))
.forEach(System.out::println); // Конечная операция
Ключевые особенности:
- После
forEachнельзя вызвать другие методы потока — это вызовет ошибку компиляции. - В параллельных стримах (
parallelStream()) порядок выполнения не гарантируется. Для сохранения порядка используйтеforEachOrdered. - Сам метод не изменяет исходную коллекцию, но действие внутри (например, вызов сеттера) может изменить состояние элементов.