Java 8 : Difference between map and flatMap for null-checking style

标签 java java-8 option-type

例如我有两个模型类:

public class Person {}
public class Car {}

现在,我有一个接受 2 个可选参数的方法:

public void example1(Optional<Person> person, Optional<Car> car) {
    if (person.isPresent() && car.isPresent()) {
        processing(person.get(), car.get());
    }
}

现在,我不想像这样使用 null 检查,我使用 flatMapmap

    person.flatMap(p -> car.map(c -> processing(p, c)));
    person.map(p -> car.map(c -> processing(p, c)));

所以我的问题是:以上两种用法有什么区别吗?因为我认为那是一样的:如果一个值为 null,java 将停止执行并返回。

谢谢

最佳答案

不同的只是一个会返回Optional<?>另一个将返回 Optional<Optional<?>> (将 ? 替换为 processing() 的返回类型)。由于您要丢弃返回类型,因此没有区别。

但最好避免映射函数,按照惯例应该避免副作用,而是使用更惯用的 ifPresent() :

person.ifPresent(p -> car.ifPresent(c -> processing(p, c)));

这也适用于 processing()有一个 void返回类型,映射函数不是这种情况。

关于Java 8 : Difference between map and flatMap for null-checking style,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055118/

相关文章:

java - Java 中 Spark MLlib 中的矩阵运算

java - 为什么 foreach lambda 比其他 for 循环慢这么多?

swift - NSNumberFormatter.stringFromNumber 会返回 nil 吗?

java - Hybris 关系型 FlexSearch 选择

java - 类似HPjmeter的图形工具查看-agentlib :hprof profiling output

java - 从接口(interface) I 的列表中创建类 C 的 ArrayList

LocalDate 和 DateTimeFormatter 的 Java 6 替代品

java - 用 Optional.ofNullable(...).ifPresent(...) 替换 get/test/set of bare references?

Swift 将可选字符串转换为 Int 或 Int32(展开可选问题)

java - 如何加速 Android XML 解析?