免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Optional 常用方法總結(jié)

Optional 類是 JAVA 8 提供的判斷程序是否為空提供的包裝工具類;可以減少代碼中的 是否為空的判斷,以及減少 NullPointerExceptions;使得程序變得更為健壯;有助于創(chuàng)建簡單、可讀性更強、比對應程序錯誤更少的程序 。
Optional 常用的方法總結(jié):

  • empty : 創(chuàng)建一個空的Optional對象
  • of:為非null的值創(chuàng)建一個Optional 。of方法通過工廠方法創(chuàng)建Optional類 。需要注意的是,創(chuàng)建對象時傳入的參數(shù)不能為null 。如果傳入?yún)?shù)為null,則拋出NullPointerException 。因此不經(jīng)常用 。
  • ofNullable:為指定的值創(chuàng)建一個Optional,如果指定的值為null,則返回一個空的Optional 。
  • isPresent: 檢查一個Optional對象中是否有值,只有值非空才返回truex,否則返回false 。
  • ifPresent:如果Optional實例有值則為其調(diào)用consumer,否則不做處理
  • get:如果Optional有值則將其返回,否則拋出NoSuchElementException 。因此也不經(jīng)常用 。
  • orElse:如果有值則將其返回,否則返回指定的其它值 。經(jīng)常用于判斷返回默認值的場景;
  • orElseGet:orElseGet與orElse方法類似,區(qū)別在于得到的默認值 。orElse方法將傳入的字符串作為默認值,orElseGet方法可以接受Supplier接口的實現(xiàn)用來生成默認值
  • orElseThrow:如果有值則將其返回,否則拋出supplier接口創(chuàng)建的異常 。
  • filter: 接收一個函數(shù)式接口 ,如果有值并且滿足斷言條件返回包含該值的Optional,否則返回空Optional 。
  • map:如果有值,則對其執(zhí)行調(diào)用mapping函數(shù)得到返回值 。如果返回值不為null,則創(chuàng)建包含mapping返回值的Optional作為map方法返回值,否則返回空Optional 。
  • flatMap:如果有值,為其執(zhí)行mapping函數(shù)返回Optional類型返回值,否則返回空Optional 。
通過示例查看 optional 帶來的好處
示例一:
根據(jù)用戶的對象獲取用戶的名稱,如果存在則返回用戶名稱,沒有則返回 unknown ;沒有使用 Option 的 Java 實現(xiàn)代碼如下:
public static String getName2(User user){       if (user!=null){           String name = user.getName();           if (StringUtils.isBlank(name)){               return "unKnown";           }           return name;       }       return "unKnown";   }沒有使用Optional 時,需要不斷的判斷是否為空,增加了代碼的可讀性和維護性,使用 Optional 之后,代碼如下:
public static String getName(User user){       return  Optional.ofNullable(user).map(p->p.getName()).orElse("unKnown");   }使用Optional 之后,通過一行便完成了 上述的功能,減少了層層的 if 判斷
示例 二:從一批學生中,選出年齡大于等于18,參加過考試并且成績大于80的人去參加比賽 。
public void useJava8() {   List<Student> studentList = initData();   for (Student student : studentList) {       Optional<Student> studentOptional = Optional.of(student);       Integer score = studentOptional.filter(s -> s.getAge() >= 18).map(Student::getScore).orElse(0);        if (score > 80) {           System.out.println("入選:" + student.getName());       }   }}

經(jīng)驗總結(jié)擴展閱讀