在 java 流中的映射中使用多个映射函数与块语句

Using multiple map functions vs. a block statement in a map in a java stream

假设我有以下代码

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

我有一些函数可能会返回 null,我正在将它应用于流的一个元素。然后我想确保任何 null 结果都改为某个默认值。与使用前面定义辅助变量 a 并在 lambda 表达式中使用代码块的示例相比,使用以下示例中的两个映射之间是否有任何显着差异?

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

是否有关于在何处避免将块语句与 lambda 函数一起使用的标准?

两者都可以。选择一个对你来说更易读的。如果计算自然分解,就像这个一样,那么多张地图可能更具可读性。有些计算不会自然分解,在这种情况下,您将陷入前者。在这两种情况下,您都不应该担心一个比另一个的性能要好得多;这在很大程度上是不考虑的。

java 提供了专门的 API 来处理 "null"。

https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html