代码之家  ›  专栏  ›  技术社区  ›  WesternGun

当IsExpTeNe()在NULL中获得属性或NULL时,可选的<t>;Java 8中的函数样式

  •  4
  • WesternGun  · 技术社区  · 6 年前

    当我从数据库中检索学生实体时,存储库返回一个可以为空的 Optional<Student> . 它有一个 birthdate 字段。

    Optional<Student> getStudentById(String id);
    

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

    我现在和:

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

    但我觉得用起来很难看 isPresent() 三元的,只是 if/else .

    而且,这是行不通的:

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

    我使用Java 8。

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

    2 回复  |  直到 6 年前
        1
  •  6
  •   Hadi Jeddizahed    6 年前

    试试这个

    studentRepository.getStudentById(id)
               .map(Student::getBirthdate).orElse(null);
    
        2
  •  6
  •   Ousmane D.    6 年前

    你可以 map 它和使用 orElse 要返回值(如果存在)或提供默认值,请执行以下操作:

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

    在你的情况下, defaultValue 会是 null .