Lambda-Ausdrücke und außergewöhnliche Streams in Java 8: Methoden sicher filtern
Lambda-Ausdrücke haben die Java-Codierung revolutioniert und präzise und ausdrucksstarke funktionale Programmiertechniken ermöglicht . Beim Umgang mit Methoden, die Ausnahmen auslösen können, wie im bereitgestellten Beispiel, können bei Java 8-Stream-Vorgängen jedoch Kompilierungsprobleme auftreten.
Das Problem
Die Code-Snippet-Versuche um einen Stream von Account-Objekten basierend auf ihrer isActive()-Methode zu filtern, die eine IOException auslöst. Der Filtervorgang kann nicht kompiliert werden, da Java erfordert, dass geprüfte Ausnahmen explizit innerhalb des Streams behandelt werden.
Die Lösung
Um dieses Problem zu beheben, muss man die potenzielle Ausnahme behandeln bevor es dem Lambda-Ausdruck entgeht. Dies kann erreicht werden, indem der isActive()-Methodenaufruf in einen Try-Catch-Block innerhalb des Lambda eingeschlossen wird:
<code class="java">s = s.filter(a -> { try { return a.isActive(); } catch (IOException e) { throw new UncheckedIOException(e); } });</code>
Durch die Konvertierung der geprüften IOException in eine UncheckedIOException kann sich die Ausnahme sicher innerhalb des Streams ausbreiten, ohne dass es dazu kommt Kompilierungsfehler.
Alternative Methoden
Alternativ kann die uncheckCall()-Methode verwendet werden, um geprüfte Ausnahmen zu behandeln, ohne auf Zwischenkonvertierungen angewiesen zu sein:
<code class="java">return s.filter(a -> uncheckCall(a::isActive)) .map(Account::getNumber) .collect(toSet());</code>
Dieser Ansatz bietet eine bequeme Möglichkeit, geprüfte Ausnahmen zu behandeln und gleichzeitig die Prägnanz von Lambda-Ausdrücken beizubehalten.
Achtung
Es ist wichtig, die potenziellen Auswirkungen der Konvertierung geprüfter Ausnahmen zu berücksichtigen Ausnahmen in ungeprüfte Ausnahmen. Es vereinfacht zwar die Ausnahmebehandlung in Stream-Operationen, entfernt aber auch den direkten Hinweis auf die potenzielle Ausnahme aus der Methodensignatur. Es muss sorgfältig darüber nachgedacht werden, ob die Behandlung von Ausnahmen auf diese Weise mit dem gewünschten Verhalten übereinstimmt.
Das obige ist der detaillierte Inhalt vonWie können Sie Streams von Objekten, die Ausnahmen auslösen, in Java 8 sicher filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!