Java可选 - 如果是其他语句

ura*_*aza 13 java if-statement optional java-8

经过一番阅读后我才看到了

if (optional.isPresent()) {
    //do smth
}
Run Code Online (Sandbox Code Playgroud)

不是使用Optional的首选方法(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);
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?还是有更推荐的方法?

The*_*ect 28

您可以使用Optional如下.

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

使用if-else语句编写是命令式样式,它需要carif-else块之前声明变量.

使用mapin Optional是更实用的风格.并且这种方法不需要事先进行变量声明,是推荐的使用方法Optional.

  • 这似乎确实有效.但是,我确实想知道这是否使代码更具可读性,或者以这种方式编写代码是否有任何优势. (5认同)

khe*_*ood 6

如果您可以将名称合并到Car构造函数中,那么您可以这样写:

car = optional.map(id -> getCar(id))
              .orElseGet(() -> new Car(carName));
Run Code Online (Sandbox Code Playgroud)

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

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