• 一 Optional


    从Java8 引入的一个很有趣的特性是Optional类。Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException)。

       一: 创建Optional对象:

      Optional<String>  test = Optional.ofNullable(name);    // 可以为空,也可以不为空
      Optional<String> test = Optional.of(name); // 不能为空
      Optional<String> test = Optional.empty(); // 空对象
    二: orElse, 如果有值,直接返回;否则返回指定的类型,类型必须是T

    return user.orElse(null);  //而不是 return user.isPresent() ? user.get() : null;
    三:
    orElseGet,如果有值,直接返回;否则自定义的由函数生成的值
          return user.orElseGet(() -> fetchAUserFromDatabase()); //而不要 return user.isPresent() ? user: fetchAUserFromDatabase()
    四: ifPresent, 存在才对它做点什么:
    user.ifPresent(System.out::println);
    五:
    map 函数隆重登场
    当 user.isPresent() 为真, 获得它关联的 orders, 为假则返回一个空集合时, 我们用上面的 orElseorElseGet 方法都乏力时, 那原本就是 map 函数的责任, 我们可以这样一行
    return user.map(u -> u.getOrders()).orElse(Collections.emptyList())

    map是可能无限级联的(前面的orElse,ifPresent没有级联的功能), 比如再深一层, 获得用户名的大写形式:
                return user.map(u -> u.getUsername())
                    .map(name -> name.toUpperCase())
                    .orElse(null);
                 map:  如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional
     
         六: 一句话小结:
              使用 Optional 时尽量不直接调用 Optional.get() 方法, Optional.isPresent() 更应该被视为一个私有方法;
              应依赖于其他 像 Optional.orElse()Optional.orElseGet()Optional.map() 等这样的方法.
     
         补充:  
                  orElseThrow:  如果有值则将其返回,否则抛出supplier接口创建的异常; 
  • 相关阅读:
    抉择
    PHP glob() 函数
    PHP之关闭网页错误提示
    PHP htmlentities() 函数
    PHP mysql_real_escape_string() 函数
    LFI & RFI & PHP封装协议之安全问题研究
    数据公钥加密和认证中的私钥公钥
    RSA算法
    APT攻防对抗
    安全参考
  • 原文地址:https://www.cnblogs.com/liufei1983/p/8124551.html
Copyright © 2020-2023  润新知