Optional类:Optional<T> 类是一个容器类,代表一个值存在或者不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念,并且可以避免空指针异常。

    Optional常用方法:

    • Optional.of(T t):创建一个Optional实例
    • Optional.empty():创建一个空的Optional实例
    • Optional.ofNullable(T t):若t不为null,创建Optional实例,否则创建空实例
    • isPresent():判断是否包含值
    • orElse(T t):如果调用对象包含值,返回该值,否则返回t
    • orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回s获取的值
    • map(Function f):如果有值进行处理,并返回处理后的Optional,否则返回Optional.empty()
    • flatMap(Function mapper):与map类似,要求返回值必须是Optional

    Optional 的使用:

    1. public static class User {
    2. private String name;
    3. private Integer age;
    4. public String getName() {
    5. return name;
    6. }
    7. public void setName(String name) {
    8. this.name = name;
    9. }
    10. public Integer getAge() {
    11. return age;
    12. }
    13. public void setAge(Integer age) {
    14. this.age = age;
    15. }
    16. }
    17. public static void main(String[] args) {
    18. User user = null;
    19. // 创建 Optional 对象
    20. Optional<User> userOptional = Optional.ofNullable(user);
    21. /* 从 Optional 中获取对象 */
    22. // 1.存在即返回,否则提供默认值
    23. userOptional.orElse(new User());
    24. // 2.存在即返回,否则由函数产生
    25. userOptional.orElseGet(User::new);
    26. // 3.存在即返回,否则抛出异常
    27. userOptional.orElseThrow(RuntimeException::new);
    28. /* 存在采取做相应的处理 */
    29. userOptional.ifPresent(System.out::println);
    30. /* map 可以对 Optional 中的对象执行某种操作,且会返回一个 Optional 对象 */
    31. // map 常用来与 orElse 系列方法组合提供默认值
    32. userOptional.map(User::getName).orElse("");
    33. // 由于 map 返回是一个 Optional 对象,因此,支持map的级联
    34. userOptional.map(User::getName)
    35. .map(String::toLowerCase)
    36. .orElseGet(String::new);
    37. }