Java 8:map和flatMap之间的区别,用于空检查样式



例如,我有两个模型类:

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());
    }
}
现在,我

不想像这样使用空检查,我使用flatMapmap

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

所以我的问题是:上述 2 种用法有什么区别吗?因为我认为这是相同的:如果一个值为空,java 将停止执行并返回。

谢谢

区别

仅在于一个将返回Optional<?>而另一个将返回Optional<Optional<?>>(将?替换为返回类型processing()(。由于您要丢弃返回类型,因此没有区别。

但最好避免使用映射函数,

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

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

如果processing()具有void返回类型,这也适用于映射函数的情况。

最新更新