JDK8中`Optional.orElse()` 和`Optional.orElseGet()`之間的區別


看例子就明白了

```


   
   
  
  
          
  1. static String B() {
  2. System. out.println( "B()...");
  3. return "B";
  4. }
  5. public static void main(final String... args) {
  6. System. out.println(Optional.of( "A").orElse(B()));
  7. System. out.println(Optional.of( "A").orElseGet(() -> B()));
  8. }

prints


   
   
  
  
          
  1. B()...
  2. A
  3. A

```

調用orElse時,將評估apicall()。值並將其傳遞給方法。 然而,在orElseGet的情況下,僅當oldValue為空時才進行評估。 orElseGet允許延遲評估。也就是說:orElse(T)無論前面Optional容器是null還是non-null,都會執行orElse里的方法,orElseGet(Supplier)並不會

> 當然,在這個例子中,差異可能是不可測量的,但是如果你必須從遠程Web服務或數據庫中獲取默認值,它突然變得非常重要。

原文地址:https://blog.csdn.net/tengxing007/article/details/82684472


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM