Java 8 で例外をスローするオブジェクトのストリームを安全にフィルタリングするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-25 21:38:03
オリジナル
709 人が閲覧しました

How Can You Safely Filter Streams of Objects That Throw Exceptions in Java 8?

Java 8 のラムダ式と例外ストリーム: メソッドを安全にフィルタリングする

ラムダ式は Java コーディングに革命をもたらし、簡潔で表現力豊かな関数型プログラミング手法を可能にしました。ただし、提供されている例のように、例外をスローする可能性のあるメソッドを扱う場合、Java 8 ストリーム操作でコンパイルの問題が発生する可能性があります。

問題

コード スニペットは、次のことを試みます。 IOException をスローする isActive() メソッドに基づいて Account オブジェクトのストリームをフィルタリングします。 Java ではストリーム内でチェック例外を明示的に処理する必要があるため、フィルタリング操作はコンパイルに失敗します。

解決策

この問題に対処するには、潜在的な例外を処理する必要があります。ラムダ式をエスケープする前に。これは、ラムダ内の try-catch ブロック内で isActive() メソッド呼び出しをラップすることで実現できます:

<code class="java">s = s.filter(a -> {
    try {
        return a.isActive();
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
});</code>
ログイン後にコピー

チェックされた IOException を UncheckedIOException に変換することで、例外は問題を引き起こすことなくストリーム内で安全に伝播できます。コンパイル エラー。

代替メソッド

または、uncheckCall() メソッドを使用して、中間変換に依存せずにチェック例外を処理できます。

<code class="java">return s.filter(a -> uncheckCall(a::isActive))
        .map(Account::getNumber)
        .collect(toSet());</code>
ログイン後にコピー

このアプローチは、ラムダ式の簡潔さを維持しながらチェック例外を処理する便利な方法を提供します。

注意

チェック例外の変換の潜在的な影響を考慮することが重要です。例外はチェックされていないものに追加されます。これにより、ストリーム操作での例外処理が簡素化されますが、メソッド シグネチャから潜在的な例外の直接的な指示も削除されます。この方法で例外を処理することが望ましい動作と一致するかどうか、慎重に検討する必要があります。

以上がJava 8 で例外をスローするオブジェクトのストリームを安全にフィルタリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!