Объясните различие между интерфейсом Iterator и методом forEach в Stream API Java.
Ответ от нейросети
sobes.tech AI
Интерфейс Iterator в Java предоставляет способ последовательного обхода элементов коллекции с возможностью явного контроля цикла, например, с помощью методов hasNext() и next(). Он позволяет вручную перебирать элементы, а также удалять элементы во время итерации.
Метод forEach в Stream API — это более декларативный способ обработки элементов потока. Он принимает лямбда-выражение или ссылку на метод и применяет его к каждому элементу, скрывая детали итерации. forEach не позволяет изменять структуру коллекции во время обхода и обычно используется для побочных эффектов.
Пример:
List<String> list = Arrays.asList("a", "b", "c");
// С использованием Iterator
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
// С использованием forEach
list.stream().forEach(element -> System.out.println(element));
Основное различие — Iterator даёт полный контроль над процессом обхода, включая возможность удаления элементов, а forEach — более удобный и лаконичный способ применения операции к каждому элементу без управления итерацией.