繁体   English   中英

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

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

例如,我有两个模型类:

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返回类型,这也适用,而映射函数则不然。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM