Ich habe das Gefühl, dass ich meinen Kommentar etwas erweitern muss ...
Über Paradigma \ Stil
Das ist wahrscheinlich der bemerkenswerteste Aspekt. FP wurde populär, weil man Nebenwirkungen vermeiden kann. Ich werde nicht näher darauf eingehen, welche Vor- und Nachteile Sie daraus ziehen können, da dies nicht mit der Frage zusammenhängt.
Ich werde jedoch sagen, dass die Iteration mit Iterable.forEach von FP inspiriert ist und eher darauf zurückzuführen ist, dass mehr FP nach Java gebracht wird (ironischerweise würde ich sagen, dass forEach in reinem FP nicht viel Verwendung findet, da es nichts anderes als das Einführen tut Nebenwirkungen).
Am Ende würde ich sagen, dass es eher eine Frage des Geschmacks \ Stils \ Paradigmas ist, in dem Sie gerade schreiben.
Über Parallelität.
Aus Sicht der Leistung gibt es keine versprochenen nennenswerten Vorteile bei der Verwendung von Iterable.forEach gegenüber foreach (...).
Laut offiziellen Dokumenten auf Iterable.forEach :
Führt die angegebene Aktion für den Inhalt der Iterable aus, in der Reihenfolge , in der Elemente beim Iterieren auftreten, bis alle Elemente verarbeitet wurden oder die Aktion eine Ausnahme auslöst .
... dh es ist ziemlich klar, dass es keine implizite Parallelität geben wird. Das Hinzufügen eines würde eine LSP-Verletzung darstellen.
Jetzt gibt es "Parallell-Sammlungen", die in Java 8 versprochen werden, aber um mit denen zu arbeiten, müssen Sie mich expliziter machen und besonders vorsichtig sein, um sie zu verwenden (siehe zum Beispiel die Antwort von mschenk74).
Übrigens: in diesem Fall Stream.forEach verwendet, und es wird nicht garantiert, dass die eigentliche Arbeit parallel ausgeführt wird (abhängig von der zugrunde liegenden Sammlung).
AKTUALISIEREN: Vielleicht nicht so offensichtlich und auf einen Blick etwas gedehnt, aber es gibt noch eine andere Facette von Stil und Lesbarkeit.
Zuallererst - einfache alte Forloops sind einfach und alt. Jeder kennt sie bereits.
Zweitens und noch wichtiger: Sie möchten Iterable.forEach wahrscheinlich nur mit einzeiligen Lambdas verwenden. Wenn "Körper" schwerer wird, sind sie in der Regel nicht so lesbar. Von hier aus haben Sie zwei Möglichkeiten: Verwenden Sie innere Klassen (yuck) oder verwenden Sie einen einfachen alten Forloop. Menschen ärgern sich oft, wenn sie sehen, dass dieselben Dinge (Iterationen über Sammlungen) auf verschiedene Arten / Stile in derselben Codebasis ausgeführt werden, und dies scheint der Fall zu sein.
Auch dies könnte ein Problem sein oder auch nicht. Kommt auf Leute an, die an Code arbeiten.