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

2022-09-01 11:03:51

假设我有以下代码

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

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

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

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


答案 1

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


答案 2

java提供了一个专用的API来处理“null”。

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