web-dev-qa-db-ja.com

Javaストリームのマップでの複数のマップ関数とブロックステートメントの使用

次のコードがあるとしましょう

data.stream()
    .map(x -> {
        Object a = maybeReturnsNull(x);
        return a == null ? defaultValue : a;
    })

nullを返す可能性のある関数がいくつかあり、それをストリームの要素に適用しています。次に、nullの結果がデフォルト値に変更されることを確認します。ヘルパー変数aを定義してラムダ式でコードブロックを使用する前の例を使用する場合と比較して、次の例のように2つのマップを使用する間に大きな違いはありますか?

data.stream()
    .map(x -> maybeReturnsNull(x))
    .map(x -> x == null ? defaultValue : x)

ラムダ関数でブロックステートメントを使用することを避けるかどうかに関する標準はありますか?

16
Brian Ecker

どちらでもかまいません。読みやすいものを1つ選択してください。このように計算が自然に分解される場合は、複数のマップの方が読みやすくなります。一部の計算は自然に分解されません。その場合、前者に行き詰まります。どちらの場合も、一方が他方よりも著しくパフォーマンスが高いことを心配する必要はありません。それは主に考慮されないことです。

14
Brian Goetz

Javaは「null」を処理するための専用APIを提供しています。

https://docs.Oracle.com/javase/8/docs/api/Java/util/Optional.html

0