java8:(Optional)

來源:互聯網
上載者:User

標籤:java8   catch   通過   element   java 8   code   str   獲得   not   

1.Optional:

return user.map(u -> u.getOrders()).orElse(Collections.emptyList())//上面避免了我們類似 java 8 之前的做法if(user.isPresent()){  return user.get().getOrders();}else{  return Collections.emptyList();}map 是可能無限級聯的,比如再深層次,獲得使用者名稱的大寫形式return user.map(u -> u.getUsername())           .map(name -> name.toUpperCase())           .orElse(null)            ;//這要是以前,寫法如下:User user = ....if( user != null ){  String name = user.getUsername();  if(name != null){    return name.toUpperCase();  }else{    return null;  }}else{  return null;}使用 Optional 時盡量不直接調用 Optional.get() 方法,Optional.isPresent() 
更應該被視為一個私人方法,應依賴於其他像 Optional.orElse() , Optional.orElseGet() , Optional.map() 等這樣的方法。

public static void main(String[] args) { //建立Optional執行個體,也可以通過方法傳回值得到。 Optional<String> name = Optional.of("Sanaulla"); //建立沒有值的Optional執行個體,例如值為‘null‘ Optional empty = Optional.ofNullable(null); //isPresent方法用來檢查Optional執行個體是否有值。 if (name.isPresent()) { //調用get()返回Optional值。 System.out.println(name.get()); } try { //在Optional執行個體上調用get()拋出NoSuchElementException。 System.out.println(empty.get()); } catch (NoSuchElementException ex) { System.out.println(ex.getMessage()); } //ifPresent方法接受lambda運算式參數。 //如果Optional值不為空白,lambda運算式會處理並在其上執行操作。 name.ifPresent((value) -> { System.out.println("The length of the value is: " + value.length()); }); //如果有值orElse方法會返回Optional執行個體,否則返回傳入的錯誤資訊。 System.out.println(empty.orElse("There is no value present!")); System.out.println(name.orElse("There is some value!")); //orElseGet與orElse類似,區別在於傳入的預設值。 //orElseGet接受lambda運算式產生預設值。 System.out.println(empty.orElseGet(() -> "Default Value")); System.out.println(name.orElseGet(() -> "Default Value")); try { //orElseThrow與orElse方法類似,區別在於傳回值。 //orElseThrow拋出由傳入的lambda運算式/方法產生異常。 empty.orElseThrow(ValueAbsentException::new); } catch (Throwable ex) { System.out.println(ex.getMessage()); } //map方法通過傳入的lambda運算式修改Optonal執行個體預設值。 //lambda運算式傳回值會封裝為Optional執行個體。 Optional<String> upperName = name.map((value) -> value.toUpperCase()); System.out.println(upperName.orElse("No value found")); //flatMap與map(Funtion)非常相似,區別在於lambda運算式的傳回值。 //map方法的lambda運算式傳回值可以是任何類型,但是傳回值會封裝成Optional執行個體。 //但是flatMap方法的lambda傳回值總是Optional類型。 upperName = name.flatMap((value) -> Optional.of(value.toUpperCase())); System.out.println(upperName.orElse("No value found")); //filter方法檢查Optiona值是否滿足給定條件。 //如果滿足返回Optional執行個體值,否則返回空Optional。 Optional<String> longName = name.filter((value) -> value.length() > 6); System.out.println(longName.orElse("The name is less than 6 characters")); //另一個樣本,Optional值不滿足給定條件。 Optional<String> anotherName = Optional.of("Sana"); Optional<String> shortName = anotherName.filter((value) -> value.length() > 6); System.out.println(shortName.orElse("The name is less than 6 characters")); }

 

java8:(Optional)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.