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

isPresent()获取属性时可选,为null时可选null;Java8中的函数样式

赫连明诚
2023-03-14

当我从DB中检索学生实体时,存储库返回一个可为null的可选值

Optional<Student> getStudentById(String id);

那么,我如何用函数式编写一个一行程序来获取它的生日,当它为null时返回null,当它不为null时,返回日期?

我现在是:

Date birthdate = studentRepository.getStudentById(id).isPresent() ? 
                    studentRepository.getStudentById(id).get().getBirthdate() : null;

但是我认为使用isPresent()和三元是丑陋的;它只是if/ther

而且,这是行不通的:

Date birthdate = studentRepository.getStudentById(id).get().getBirthdate().orElse(null); // this does not work because orElse() cannot chain with getBirthdate()

我支持Java8。

我认为没有任何开销是不可能的,但我愿意接受建议。


共有2个答案

艾国安
2023-03-14

您可以mapit并使用orElse返回值(如果存在),或者提供默认值:

studentRepository.getStudentById(id)
                 .map(Student::getBirthdate)
                 .orElse(defaultValue);

在您的情况下,defaultValue将是null

戎劲
2023-03-14

试试这个

studentRepository.getStudentById(id)
           .map(Student::getBirthdate).orElse(null);
 类似资料:
  • 我知道Optionals ifPresent()调用的目的是替换空检查。从Oracle文档中提取代码示例,它在简单情况下似乎非常有用。例如: 我只是想了解为什么这被认为比空检查更好。可读性?表演在我看来,这会对项目性能造成影响,因为必须引入一个新的对象才能容纳我们最终希望获得的对象?总之,为什么这是 如果(声卡!=null),则认为比这更好。

  • 有人能帮我处理下面的代码吗?我想要一个使用函数的等价物。 只是一个音符我试过这个,但它不工作 不起作用的是-当值存在并且返回可选值时。empty()我希望原始函数返回null。它现在正在返回“随机”。 我的假设是,由于方法返回,它被替换。 请注意,原始代码是由其他人编写的。由于它有很多依赖关系,我无法更改输入/输出参数。:(

  • 我有一个可选对象: 我想返回或如果为空返回。 我们是否有比遵循更复杂的方法来实现这一点?

  • 我最近开始学习oracle和SQL。在学习过程中,我遇到了几个问题,我的朋友在一次采访中被问到。 此查询生成Employees表中的所有行。至于我所理解的Oracle在列中搜索数据,那么,NULL,这里是作为列名处理的吗?我说Oracle在列中搜索数据是正确的吗?Oracle怎么会给出这个查询中的所有行呢?在WHERE子句中,条件的左手边不一定是列名吗?它不应该抛出一个错误吗? 不给出选定的行。

  • 问题内容: 我想使用以下函数(在PostgreSQL中): 我将其翻译成英文时可能会有一些错别字,但只要传递有效参数,实际功能就可以正常工作。但是,例如,我的用户可能不想按用户名过滤结果。或者,他可以选择在日期之后携带数据,但不指定结束日期。我可以做一些像 等等。但是,如果我没记错的话,我必须编写49个查询,因为我有7个可能会或可能不会被过滤的参数。我可以这样做,但是如果可能的话,我想通过做类似的

  • 我有一个api控制器操作,其中包含一个可选(且为空)参数。如果方法签名中存在此参数,则生成Swagger文档将失败,但如果将其从签名中删除,则生成成功。似乎可选参数是错误的原因,但我不知道为什么... 我正在使用Swashbuckle与ASPNET-API-Versioning的集成:https://github.com/microsoft/ASPNET-API-Versioning/wiki/S