Warum entfernt iterator.forEachRemaining das Element im Consumer-Lambda nicht?

Sehen wir uns dieses Beispiel an:

public class ListIteratorTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("element1");
        list.add("element2");
        list.add("element3");
        list.add("element4");

        ListIterator<String> iterator = list.listIterator();
    }
}

Und jetzt funktioniert das gut:

    // prints elements out, and then appropriately removes one after another
    while (iterator.hasNext()){
        System.out.println(iterator.next());
        iterator.remove();
    }

während dies eine IllegalStateException auslöst:

        // throws IllegalStateException, why?
        iterator.forEachRemaining(n -> {
            System.out.println(n);
,            iterator.remove();
        });

Meine Frage ist kurz: warum?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage