java中orElse和orElseGet方法区别小结

 更新时间:2023年10月26日 11:00:39   作者:翟凤玺  
这篇文章主要给大家介绍了关于java中orElse和orElseGet方法区别的相关资料,两者之间的区别细微,但是却在某些场景下显的很重要,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

orElse 和 orElseGet 是 Optional 类的两个方法,用于处理可能为空的值。

orElse()

当optional值不存在时,调用orElse()返回orElse()的参数,如果optional的值存在时返回optional的值

orElseGet()

当optional值不存在时,调用orElseGet()中接口调用的返回值,如果optional的值存在时返回optional的值,例子如下:

import java.util.Optional;

public class Main {
    public static void main(String[] args){
        String nullValue = null;
        String optional = Optional.ofNullable(nullValue).orElse("Su");
        System.out.println(optional);
        String optionalGet = Optional.ofNullable(nullValue).orElseGet(() -> "Xiao");
        System.out.println(optionalGet);
        String nonNullOptional = Optional.ofNullable("Susan").orElse("Su");
        System.out.println(nonNullOptional);
        String nonNullOptionalGet = Optional.ofNullable("Molly").orElseGet(() -> "Xiao");
        System.out.println(nonNullOptionalGet);
    }
}

结果:

Su
Xiao
Susan
Molly

区别

  • orElse 方法:
  • orElse 方法接受一个默认值作为参数,并在 Optional 对象为空时返回该默认值。
  • 无论 Optional 对象是否为空,orElse 方法都会执行默认值的计算。
  • 示例:
Optional<String> value = Optional.ofNullable(someValue); 
String result = value.orElse("default");
  • orElseGet 方法:
  • orElseGet 方法接受一个 Supplier 函数式接口作为参数,并在 Optional 对象为空时调用该函数式接口获取默认值。
  • 只有在 Optional 对象为空时,orElseGet 方法才会执行默认值的计算。
  • 示例:
Optional<String> value = Optional.ofNullable(someValue); 
String result = value.orElseGet(() -> computeDefaultValue());

总结

  • orElse 方法总是会计算默认值,无论 Optional 对象是否为空。
  • orElseGet 方法只有在 Optional 对象为空时才会计算默认值,可以通过 Supplier 函数式接口提供延迟计算的能力。
  • 在使用时,根据具体需求选择适合的方法。如果默认值的计算是简单的常量或已经存在的值,可以使用 orElse 方法。如果默认值的计算涉及复杂的逻辑或需要延迟计算,可以使用 orElseGet 方法。

到此这篇关于java中orElse和orElseGet方法区别的文章就介绍到这了,更多相关java orElse和orElseGet区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • java编译时与运行时概念与实例详解

    java编译时与运行时概念与实例详解

    本篇文章通过实例对 java程序编译时与运行时进行了详解,需要的朋友可以参考下
    2017-04-04
  • Java设计模式之备忘录模式(Memento模式)介绍

    Java设计模式之备忘录模式(Memento模式)介绍

    这篇文章主要介绍了Java设计模式之备忘录模式(Memento模式)介绍,memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态,需要的朋友可以参考下
    2015-03-03
  • Spring boot+VUE实现token验证的示例代码

    Spring boot+VUE实现token验证的示例代码

    本文详细介绍了使用Vue和SpringBoot实现token认证的方法,包括前后端交互流程、后端依赖导入、token工具类、拦截器、跨域处理、前端路由守卫、请求拦截器等内容,具有一定的参考价值,感兴趣的可以了解一下
    2024-10-10
  • SpringBoot中使用@scheduled定时执行任务的坑

    SpringBoot中使用@scheduled定时执行任务的坑

    本文主要介绍了SpringBoot中使用@scheduled定时执行任务的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Spring Cloud Config Client超时及重试示例详解

    Spring Cloud Config Client超时及重试示例详解

    这篇文章主要给大家介绍了关于Spring Cloud Config Client超时及重试的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2018-05-05
  • Java 并发编程中的锁机制示例详解

    Java 并发编程中的锁机制示例详解

    本文探讨了Java并发编程中的锁机制,包括锁的基本概念、Java中的锁类型如synchronized、ReentrantLock、ReadWriteLock、锁的优化策略以及如何避免死锁,文章强调了合理选择和优化锁使用对于提升程序并发性能的重要性,并提供了实际应用中的最佳实践,感兴趣的朋友一起看看吧
    2025-01-01
  • Java中ConcurrentHashMap是如何实现线程安全

    Java中ConcurrentHashMap是如何实现线程安全

    ConcurrentHashMap是一个哈希表,支持检索的全并发和更新的高预期并发。本文主要介绍了Java中ConcurrentHashMap是如何实现线程安全,感兴趣的可以了解一下
    2021-11-11
  • Java音频处理之音频流转音频文件和获取音频播放时长详解

    Java音频处理之音频流转音频文件和获取音频播放时长详解

    这篇文章主要为大家详细介绍了如何使用Java实现音频流转音频文件和获取音频播放时长功能,文中的示例代码简洁易懂,有需要的小伙伴可以了解下
    2025-07-07
  • Java中解决跨域问题的方法汇总(建议收藏)

    Java中解决跨域问题的方法汇总(建议收藏)

    我们在开发过程中经常会遇到前后端分离而导致的跨域问题,导致无法获取返回结果,下面给大家介绍Java中解决跨域问题的方法汇总,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • zookeeper概述图文详解

    zookeeper概述图文详解

    今天小编就为大家分享一篇关于Zookeeper概述图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论