Java Optional - If Else 语句

2022-09-01 19:58:24

所以经过一些阅读,我看到了

if (optional.isPresent()) {
    //do smth
}

不是使用“可选”(http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html)的首选方式。但是,如果我有一个像这样的if语句:

if (optional.isPresent()) {
    car = getCar(optional.get());
} else {
    car = new Car();
    car.setName(carName);
}

这是执行此操作的最佳方法还是有更推荐的方法?


答案 1

您可以按如下方式使用。Optional

Car car = optional.map(id -> getCar(id))
            .orElseGet(() -> {
                Car c = new Car();
                c.setName(carName);
                return c;
            });

使用语句编写是命令式样式,它要求在块之前声明变量。if-elsecarif-else

使用 in 是更实用的风格。这种方法事先不需要变量声明,并且是推荐使用的方式。mapOptionalOptional


答案 2

如果可以将名称合并到构造函数中,则可以编写以下内容:Car

car = optional.map(id -> getCar(id))
              .orElseGet(() -> new Car(carName));

如果你必须从构造函数中单独调用 setter,你最终会得到这样的东西:

car = optional.map(id -> getCar(id))
              .orElseGet(() -> {
                  Car c = new Car();
                  c.setName(carName);
                  return c;
              });

推荐