Brechen oder aus Java 8 Stream foreach zurückkehren?
Feb 07, 2025 pm 12:09 PM
Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke M?glichkeit, Datensammlungen zu verarbeiten. Eine h?ufige Frage bei der Verwendung von Stream lautet jedoch: Wie unterbrochen oder zurück von forEach
Operationen zurückkehren kann oder zurückkehren?
herk?mmliche Schleifen erm?glichen eine frühzeitige Unterbrechung oder Rückkehr, aber die forEach
-Methode von Stream unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erl?utert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht.
Weitere Lesen: Java -Stream -API -Verbesserungen
Stream foreach verstehen
Die forEach
-Methode ist ein Anschlussbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Es ist für jedes Element ausgelegt. break
return
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream().forEach(name -> { System.out.println(name); });im obigen Beispiel jeden Namen in der Liste. Aber was ist, wenn wir die Verarbeitung aufh?ren wollen, wenn wir "Bob" sehen?
forEach
Warum k?nnen Sie nicht Pause verwenden oder zurückkehren?
verwendet keine herk?mmlichen Schleifenstrukturen, daher sind in den darin enthaltenen Lambda -Ausdrücken nicht zul?ssig. Die
-Anweisung innerhalb des Lambda -Ausdrucks verl?sst nur den Lambda -Ausdruck selbst und verl?sst nicht die forEach
oder seine geschlossene Methode. Der Versuch, break
oder continue
zu verwenden, führt zu einem Kompilierungsfehler: return
forEach
break
Alternative Methode continue
names.stream().forEach(name -> { if (name.equals("Bob")) { break; // 編譯錯(cuò)誤 } });Wenn eine Schleife unterbrechen muss, ist die klassische
-Schload eine effektive und h?ufig die beste Option.
2. Die
for
-Methode bedeutet, dass die Stream-Verarbeitung, wenn die Bedingung erfüllt ist, kurzgeschlossen wird.
for (String name : names) { if (name.equals("Bob")) { break; } System.out.println(name); }
3.
Wenn Sie Java 9 oder h?her verwenden, k?nnen Sie die Methode verwenden, um die Elemente zu verarbeiten, bis ein bestimmter Zustand erfüllt ist. anyMatch()
boolean found = names.stream().anyMatch(name -> { if (name.equals("Bob")) { // 執(zhí)行操作 System.out.println("找到Bob"); return true; // 這將使Stream短路 } System.out.println(name); return false; });4.
technisch gesehen k?nnen Sie eine Ausnahme zum Beenden der
-Methode machen, dies wird jedoch nicht empfohlen.
takeWhile
names.stream() .takeWhile(name -> !name.equals("Bob")) .forEach(System.out::println);Verwenden Sie benutzerdefinierte
, um die Stream -Verarbeitung k?rniger zu steuern, jedoch auf Kosten des Hinzufügens von Komplexit?t.
W?hlen Sie die richtige Methode
aus- Einfachheit: Wenn Sie frühzeitig beenden müssen, ist die herk?mmliche Zyklusmethode einfacher.
- Funktionaler Stil: Wenn Sie nicht vom funktionalen Programmierparadigma abweichen m?chten, k?nnen Sie
anyMatch
,noneMatch
,takeWhile
(Java 9) Methoden m?glicherweise angemessener sein. - Leistung: Insbesondere bei der Arbeit mit gro?en Datens?tzen muss die Leistungsauswirkungen jeder Methode berücksichtigt werden.
Schlussfolgerung
Die forEach
-Methode im Java 8 -Stream erlaubt nicht die Verwendung von break
oder return
wie herk?mmliche Schleifen, aber es gibt verschiedene M?glichkeiten, diese Einschr?nkung zu umgehen. Wenn Sie diese Methoden verstehen, k?nnen Sie die beste Option basierend auf der tats?chlichen Situation ausw?hlen.
Das obige ist der detaillierte Inhalt vonBrechen oder aus Java 8 Stream foreach zurückkehren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Datei "Settings.JSON" befindet sich auf dem Pfad auf Benutzerebene oder Arbeitsbereichsebene und wird verwendet, um die VSCODE-Einstellungen anzupassen. 1. Benutzer-Level-Pfad: Windows ist C: \ Benutzer \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS is /users//library/applicationsupport/code/user/settings.json, Linux is /home/.config/code/usser/setings.json; 2. Pfad auf Arbeitsbereichsebene: .VSCODE/Einstellungen im Projekt Root Directory

Um JDBC -Transaktionen korrekt zu verarbeiten, müssen Sie zun?chst den automatischen Komiti -Modus ausschalten und dann mehrere Vorg?nge ausführen und schlie?lich entsprechend den Ergebnissen festlegen oder rollen. 1. Nennen Sie Conn.SetAutoCommit (False), um die Transaktion zu starten. 2. Führen Sie mehrere SQL -Operationen aus, z. B. einfügen und aktualisieren. 3. Rufen Sie Conn.Commit () an, wenn alle Vorg?nge erfolgreich sind, und rufen Sie Conn.Rollback () auf, wenn eine Ausnahme auftritt, um die Datenkonsistenz zu gew?hrleisten. Gleichzeitig sollten Try-with-Ressourcen verwendet werden, um Ressourcen zu verwalten, Ausnahmen ordnungsgem?? zu behandeln und Verbindungen zu schlie?en, um Verbindungsleckage zu vermeiden. Darüber hinaus wird empfohlen, Verbindungspools zu verwenden und Save -Punkte zu setzen, um teilweise Rollback zu erreichen und Transaktionen so kurz wie m?glich zu halten, um die Leistung zu verbessern.

Abh?ngigkeitsinjektion (DI) IsAdeSnIntWhereObjectSRecedEpendencieSexternally, PromotingLoosecoubingAneAtReTingThroughConstructor, Setter, Orfieldinjection.2springFrameworkuSaSNotations-@-Komponenten,@Service und@autowiredWithjava-basierte Konfitation

Itertools.combinations wird verwendet, um alle nicht repetitiven Kombinationen (irrelevant) zu generieren, die eine bestimmte Anzahl von Elementen aus dem iterablen Objekt ausw?hlen. Die Verwendung umfasst: 1. Auswahl 2 Elementkombinationen aus der Liste, wie z. 2. Nehmen Sie 3 Charakterkombinationen von Saiten wie "ABC" und "ABD", die für die Subsequence -Erzeugung geeignet sind; 3. Finden Sie die Kombinationen, in denen die Summe von zwei Zahlen dem Zielwert entspricht, z. B. 1 5 = 6, die Doppelschleifenlogik vereinfachen. Der Unterschied zwischen Kombinationen und Anordnung besteht darin, ob die Reihenfolge wichtig ist, Kombinationen betrachten AB und BA als gleich, w?hrend Permutationen als unterschiedlich angesehen werden.

Das Fixture ist eine Funktion, mit der voreingestellte Umgebungen oder Daten für Tests bereitgestellt werden. 1. Verwenden Sie den Dekorateur für @PyTest.Fixure, um die Fixture zu definieren. 2. Inject Fixture in Parameterform in der Testfunktion; 3. Führen Sie ein Setup vor Ausbeute aus und rei?en Sie dann ab. 4. Steuerungsumfang durch Umfangsparameter wie Funktion, Modul usw.; 5. Legen Sie das gemeinsame Ger?t in conftest.

ThejvMenablesJavas "Writeonce, Runanywhere" -CapabilityByexecutingByteCodethroughfourMainComponents: 1.TheClassloadersubStemLoads, Links, undinitializes

Verwenden Sie Klassen im Java.Time -Paket, um das alte Datum und die Kalenderklassen zu ersetzen. 2. Erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit durch LocalDate, LocalDatetime und Local Time; 3. Erstellen Sie ein bestimmtes Datum und eine bestimmte Uhrzeit mit der von () Methode; 4.. Verwenden Sie die Plus/Minus -Methode, um die Zeit nicht zu erh?hen und zu verkürzen. 5. Verwenden Sie ZonedDatetime und zoneId, um die Zeitzone zu verarbeiten. 6. Format und analysieren Sie Datumszeichenfolgen über DateTimeFormatter; 7. Verwenden Sie sofortige, um bei Bedarf mit den alten Datumstypen kompatibel zu sein. Die Verarbeitung der Datum in der modernen Java sollte der Verwendung von Java.Timeapi vorrangig machen, was klare, unver?nderliche und linear ist

ChromecanopenLocalFiles-?hnlich-?hnlich von "OpenFile" OrdraggingTHemintotothebrowser;
