当前位置: 首页 > news >正文

Java Optional orElse orElseGet orElseThrow()

在 Java 中,Optional   orElse类型 包含 .orElse()  .orElseThrow() 

orElseThrow() 用法:

无参版本:当 Optional 为空时,抛出 NoSuchElementException;

Optional<String> optionalValue = Optional.empty();
String value = optionalValue.orElseThrow(); // 当为空时抛出 NoSuchElementException

带参版本:可以自定义抛出的异常类型 

Optional<String> optionalValue = Optional.empty();
String value = optionalValue.orElseThrow(() -> new IllegalArgumentException("值不存在"));

用法示例:

import java.util.Optional;
import java.util.function.Supplier;public class OrElseGetExample {public static void main(String[] args) {// 1. Optional 有值的情况Optional<String> presentOpt = Optional.of("存在的值");String result1 = presentOpt.orElseGet(() -> {System.out.println("执行了默认值逻辑(本不该执行)"); // 不会执行return "默认值";});System.out.println(result1); // 输出:存在的值// 2. Optional 为空的情况Optional<String> emptyOpt = Optional.empty();String result2 = emptyOpt.orElseGet(() -> {System.out.println("执行了默认值逻辑"); // 会执行return "通过Supplier生成的默认值";});System.out.println(result2); // 输出:通过Supplier生成的默认值// 3. 实际场景:复杂默认值的创建(如数据库查询)Optional<User> userOpt = Optional.empty(); // 假设从数据库查询结果为空User defaultUser = userOpt.orElseGet(() -> fetchDefaultUserFromDB());System.out.println("使用的用户:" + defaultUser.getName()); // 输出:默认用户}// 模拟从数据库获取默认用户(成本较高的操作)private static User fetchDefaultUserFromDB() {System.out.println("执行数据库查询获取默认用户...");return new User("默认用户");}static class User {private String name;public User(String name) { this.name = name; }public String getName() { return name; }}
}

使用时要注意,如果 Optional 为空,这个方法会立即抛出异常,而不是返回默认值,这是它与 orElse() 和 orElseGet() 的主要区别。

orElseGet() 用法:

import java.util.Optional;
import java.util.function.Supplier;public class OrElseGetExample {public static void main(String[] args) {// 1. Optional 有值的情况Optional<String> presentOpt = Optional.of("存在的值");String result1 = presentOpt.orElseGet(() -> {System.out.println("执行了默认值逻辑(本不该执行)"); // 不会执行return "默认值";});System.out.println(result1); // 输出:存在的值// 2. Optional 为空的情况Optional<String> emptyOpt = Optional.empty();String result2 = emptyOpt.orElseGet(() -> {System.out.println("执行了默认值逻辑"); // 会执行return "通过Supplier生成的默认值";});System.out.println(result2); // 输出:通过Supplier生成的默认值// 3. 实际场景:复杂默认值的创建(如数据库查询)Optional<User> userOpt = Optional.empty(); // 假设从数据库查询结果为空User defaultUser = userOpt.orElseGet(() -> fetchDefaultUserFromDB());System.out.println("使用的用户:" + defaultUser.getName()); // 输出:默认用户}// 模拟从数据库获取默认用户(成本较高的操作)private static User fetchDefaultUserFromDB() {System.out.println("执行数据库查询获取默认用户...");return new User("默认用户");}static class User {private String name;public User(String name) { this.name = name; }public String getName() { return name; }}
}

orElse() 用法:

import java.util.Optional;public class OrElseExample {public static void main(String[] args) {// 1. Optional 有值的情况Optional<String> presentOpt = Optional.of("存在的值");String result1 = presentOpt.orElse("默认值");System.out.println(result1); // 输出:存在的值// 2. Optional 为空的情况Optional<String> emptyOpt = Optional.empty();String result2 = emptyOpt.orElse("默认值");System.out.println(result2); // 输出:默认值// 3. 注意:默认值的逻辑总会执行(即使 Optional 有值)Optional<String> opt = Optional.of("有值");String result3 = opt.orElse(generateDefaultValue()); // 这里会先执行 generateDefaultValue(),再返回 "有值"}// 生成默认值的方法private static String generateDefaultValue() {System.out.println("执行了生成默认值的逻辑");return "动态生成的默认值";}
}

实际开发中需要按具体需求去使用它们

http://www.dtcms.com/a/515913.html

相关文章:

  • windows10 wordpress十堰seo优化
  • 优选算法:01 双指针巧解移动零问题
  • 消息队列Kafka
  • 做游戏陪玩网站连锁销售网站制作
  • 【数字逻辑】数字逻辑实验实战:74HC151实现逻辑函数+74HC138搭全加器(附接线步骤+避坑指南)
  • Ubuntu上vue3 vite使用MBTiles搭建地图服务器
  • CClink转EtherCAT协议转换落地——汇川PLC管控球磨机CClink伺服案例
  • wordpress handsome长沙seo免费诊断
  • ChatGPT Atlas 发布:把 AI 直插进浏览器的一次重构
  • 第1章:初识Linux系统——第9节:安装服务软件、维护文件系统安全与文件权限配置实例
  • openAI发布的AI浏览器:什么是Atlas?(含 ChatGPT 浏览功能)macOS 离线下载安装Atlas完整教程
  • 西安市高陵区建设局网站聊城网站制作信息
  • ssh别名和多服务器同步文件
  • 苏州建设网站的公司软件开发和编程的区别
  • Linux I²C 总线驱动开发:从架构到实战的完整指南
  • Eureka控制台页面参数说明 ​
  • 智慧养老+适老化改造:科技与温情的双向奔赴,让晚年生活更有尊严
  • 什么是网络安全,网络空间安全有哪些安全?
  • 深圳网站建设要多少钱网站开发h5技术
  • 【浙江政务服务网-注册_登录安全分析报告】
  • 二十三、K8s企业级架构设计及落地
  • 网站建设销售客户开发创建个人网站的步骤
  • MySQL覆盖索引深度解析:从原理到实践的性能优化之道
  • 国产中间件与浏览器选型指南:覆盖政务、金融、电信应用场景
  • linux学习笔记(49)Redis详解(1)
  • 扩展、Docker-compose-1
  • Label Smoothing
  • 深入理解 MySQL 锁机制:全局锁、表锁与行锁
  • 本科专业 网站开发wordpress子站点目录
  • ABP Framework 与 若依(RuoYi) 产品可用性全方位碰撞