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


说我有以下代码

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


7307
2018-06-25 19:06


起源

要么 .map(this::maybeReturnsNull).map(Optional::ofNullable).map(o -> o.orElse(defaultValue)) - assylias
@assylias:即使它没有在性能上有所作为,我认为单一 .map(x -> Optional.ofNullable(maybeReturnsNull(x)).orElse(defaultValue)) 应优先考虑三个映射步骤。但是,这仍然是品味问题...... - Holger


答案:


要么没事。选择一个看起来更具可读性的那个。如果计算自然地分解,就像这样,那么多个映射可能更具可读性。有些计算不会自然地分解,在这种情况下你会被困在前者身上。在任何一种情况下,你都不应该担心一个人的表现要比另一个人高得多;这在很大程度上是不考虑的。


11
2018-06-25 19:22





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

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


0
2018-06-26 02:42