当前位置: 首页 > 知识库问答 >
问题:

Java可选-如果其他语句

许俊雅
2023-03-14

所以读了一些书之后我看到了

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);
}

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

共有3个答案

司空朝
2023-03-14

更进一步,如果您有多个if(可选的.isPresent())if(obj!=null)

你可以这样做:

(getN返回可选

return get1().map(Optional::of)
.orElseGet(() -> get2()).map(Optional::of)
.orElseGet(() -> get3()).map(Optional::of);

也就是说,使用if语句会像这样

Optional<Car> car = get1();
if (car.isPresent()){
  return car;
}
car = get2();
if (car.isPresent()){
  return car;
}
car = get3();
if (car.isPresent()){
  return car;
}
return Optional.empty();

海嘉赐
2023-03-14

如果您可以将名称合并到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;
              });
长孙兴德
2023-03-14

您可以使用可选的,如下所示。

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

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

可选中使用map是更具功能性的样式。这种方法不需要事先声明变量,推荐使用可选的方式。

 类似资料:
  • 我让用户在一个< code>int[]中输入5个int的列表。然后,我用一个简单的< code>for语句遍历int[]中的这些int。我声明了一个名为“evens”的< code>int变量如果int[]中的数字at ,< code > evens ; 现在我有了 语句: 问题是,无论偶数的值是多少,都会调用它。它可以是5或3,但仍会被调用。我最近一直在使用C#,但这是简单的Java。 整机代码

  • 在Optional while Optional.orElse方法被调用时,无论元素是否存在,都不执行orElse部分,它的行为不像if else条件那样。 在下面的代码中,如果您在案例1中看到getNullPoJo和getDefaultPoJo都被执行,因为getNullPoJo将返回空的可选的 当前输出为: 正在执行getNullPoJo 执行getDefaultPoJo pojo1获得默认值

  • 我已经开始练习R闪亮,请在下面的代码中找到我试图进行计算的部分。请协助获取输出,因为我无法生成。 用户界面 库(发光)库(发光板) 我的页面 titlePanel(“零基成本模型”), 侧边栏 侧边栏面板(“输入客户详细信息”), 条件="input.tabselect==1", conditionalPanel(condition=“input.tabselect==5”, #submitBut

  • 语法到底有什么问题,为什么会出现在下面的代码中?我已经数过括号了,但还没弄清楚。 注意:它给出了如下语法错误:

  • 进程优先权 当计划线程时使用的优先权。在有需要时可调整优先权到较高或较低。 文件位置 你可以为不同的文件类型改变文件夹。在默认情况下,大部分的文件设置在设置位置。然而, 一些文件是保存在 profiles目录和全部日志文件保存在 logs 目录。 文件关联(只限于完整版本) 文件关联是 Navicat 使用什么来打开 Navicat 已保存的文件。例如:.npt 文件(数据传输设置文件)将会使用数

  • 当使用缺乏原生Pact支持的语言来写服务提供者时,你仍然可以使用通用的Pact提供者端验证工具来验证是否满足契约。 通用Pact提供者验证 下面的设置简化了任何语言的Pact提供者端的验证过程。 特性: 验证发布到Pact Broker的Pact文件 在开发环境验证供测试用的本地Pact*.json文件 安装有Ruby环境以及sane的预先配置的Docker镜像,缺省为src / Rakefile