Использование нескольких функций карты против оператора блока в карте в потоке java

Скажем, у меня есть следующий код

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

У меня есть функция, которая может возвращать null, и я применяю ее к элементу потока. Затем я хочу убедиться, что любой результат null будет изменен на некоторое значение по умолчанию. Есть ли существенная разница между использованием двух карт, как в следующем примере, по сравнению с использованием предыдущего примера, который определяет вспомогательную переменную a и использует блок кода в выражении лямбда?

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

Есть ли стандарт на то, где или нет, чтобы избежать использования операторов блока с лямбда-функциями?

Ответ 1

Либо все нормально. Выберите тот, который кажется вам более читаемым. Если вычисление естественным образом разлагается, как это делается, то множественные карты, вероятно, более читабельны. Некоторые вычисления естественно не разлагаются, и в этом случае вы застряли в первом. В любом случае вы не должны беспокоиться о том, что один из них значительно более эффективен, чем другой; что в значительной степени не рассматривается.