【问题标题】:Using multiple map functions vs. a block statement in a map in a java stream在 java 流的映射中使用多个映射函数与块语句
【发布时间】:2015-09-12 13:20:58
【问题描述】:

假设我有以下代码

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 函数的块语句的标准?

【问题讨论】:

  • .map(this::maybeReturnsNull).map(Optional::ofNullable).map(o -> o.orElse(defaultValue))
  • @assylias:即使它不会对性能产生影响,我认为单个.map(x -> Optional.ofNullable(maybeReturnsNull(x)).orElse(defaultValue)) 应该优于这里的三个映射步骤。但好吧,这仍然是一个品味问题……

标签: java java-8 java-stream map-function


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-11-01
      • 2021-08-28
      • 2018-12-22
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2023-03-19
      • 2012-07-01
      相关资源
      最近更新 更多