Ответ
Метод forEach() возвращает void. Это терминальная операция, предназначенная для выполнения действия (side-effect) над каждым элементом коллекции или стрима, а не для возврата нового объекта.
Примеры:
// 1. forEach в коллекциях (Iterable.forEach)
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(item -> System.out.print(item + " ")); // Вывод: a b c
// 2. forEach в Stream API (Stream.forEach)
list.stream()
.filter(s -> s.startsWith("a"))
.forEach(System.out::println); // Вывод: a
Важные замечания:
- Назначение: Используется для финальных действий: логирование, запись в файл, модификация внешних переменных.
- Порядок: В параллельных стримах (
parallelStream()) порядок выполненияforEachне гарантирован. Для сохранения порядка используйтеforEachOrdered(). - Не для преобразования: Для преобразования данных используйте промежуточные операции
map()илиflatMap(), а для сбора результатов — терминальную операциюcollect().