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