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

廊坊做网站教程泉州网站建设技术支持

廊坊做网站教程,泉州网站建设技术支持,企业网站icp是什么,佛山室内设计公司排名核心用途 Optional 是 Java 8 引入的容器类,用于解决 null 检查的繁琐性和代码可读性问题。它明确表示一个值可能存在或可能不存在,通过链式调用强制开发者处理空值场景。 创建对象 方法描述示例Optional.of(value)创建非空 Optional(若 va…

核心用途

Optional 是 Java 8 引入的容器类,用于解决 null` 检查的繁琐性和代码可读性问题。它明确表示一个值可能存在或可能不存在,通过链式调用强制开发者处理空值场景。

创建对象

方法描述示例
Optional.of(value)创建非空 Optional(若 value为 null 抛异常)Optional.of(“Hello”)
Optional.ofNullable(value)允许 value为 null的 OptionalOptional.ofNullable(nullableValue)
Optional.empty()创建空 OptionalOptional.empty()

常用操作方法

判断值是否存在

Optional<String> opt = Optional.of("data");
if (opt.isPresent()) { // 值存在时的操作
}

消费值(ifPresent)

opt.ifPresent(value -> System.out.println("Value: " + value));

获取值

  • get(): 直接获取值(若为空抛 NoSuchElementException
String value = opt.get(); // 不推荐,容易引发异常
  • orElse(default): 值不存在时返回默认值
String result = opt.orElse("default");
  • orElseGet(supplier): 值不存在时通过 Supplier 生成默认值
String result = opt.orElseGet(() -> generateDefault());
  • orElseThrow(exceptionSupplier): 值不存在时抛出自定义异常
String result = opt.orElseThrow(() -> new RuntimeException("Value not found"));

转换值(map 与 flatMap)

  • map(Function): 对值进行转换(返回新 Optional)
Optional<Integer> lengthOpt = opt.map(String::length);
  • flatMap(Function): 扁平化转换(避免嵌套 Optional)
Optional<U> result = opt.flatMap(value -> anotherOptional);

过滤值(filter)

Optional<String> filtered = opt.filter(s -> s.length() > 3);

链式调用实战

传统写法(多层嵌套 if):
if (user != null) {Address address = user.getAddress();if (address != null) {String city = address.getCity();if (city != null) {System.out.println(city.toUpperCase());}}
}
Optional 链式调用
Optional.ofNullable(user).map(User::getAddress).map(Address::getCity).map(String::toUpperCase).ifPresent(System.out::println);

处理嵌套 Optional

问题场景

当方法返回 Optional<Optional> 时,需要扁平化处理。

Optional<Optional<String>> nestedOpt = Optional.of(Optional.of("data"));

解决方案

使用 flatMap 代替 map

String result = nestedOpt.flatMap(Function.identity()).orElse("default");

注意事项

  1. 不要滥用 Optional
    • 避免将 Optional 作为方法参数或类的字段(设计为返回类型)。
    • 不要用 Optional 替代所有 null 检查,仅在需要明确表达“可能无值”时使用。
  2. 避免 get()
    尽量使用 orElseorElseGetorElseThrow 代替直接 get()
  3. 性能考量
    Optional 的链式调用会创建中间对象,但对大多数应用场景性能影响可忽略。
  4. null 的互操作
Object value = optional.orElse(null); // 不推荐,但必要时可用

完整示例

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {// 示例:用户信息处理User user = findUserById("123");String city = Optional.ofNullable(user).flatMap(User::getAddress).map(Address::getCity).filter(c -> !c.isEmpty()).orElse("Unknown City");System.out.println(city);}static User findUserById(String id) {// 模拟数据库查询return new User(new Address("Beijing"));}static class User {private Address address;User(Address address) { this.address = address; }Optional<Address> getAddress() { return Optional.ofNullable(address); }}static class Address {private String city;Address(String city) { this.city = city; }String getCity() { return city; }}
}

通过合理使用 Optional,可以显著提升代码的可读性和健壮性,减少 NullPointerException 的风险。

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

相关文章:

  • 安全月报 | 傲盾DDoS攻击防御2025年9月简报
  • 有哪些做品牌特卖的网站做网页专题 应该关注哪些网站
  • 探索MySQL8.0隐藏特性窗口函数如何提升数据分析效率
  • 对于生物样本库的温湿度监控是如何实现对数据进行历史数据分析的呢?
  • 深入解析 Amazon Athena:云上高效数据分析的关键引擎
  • [SQL]如何使用窗口函数提升数据分析效率实战案例解析
  • Centos 7 | 定时运行 gzip 进程导致 CPU 过高,但无法确定系统自动运行 gzip 的原因 排查思路
  • Python爬虫实战:获取证监会外国投资机构信息及数据分析
  • seo网站推广费用装饰公司看的设计网站
  • 全栈开发杂谈————JAVA微服务全套技术栈详解
  • 微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器的快速使用
  • 仿小红书短视频APP源码:Java微服务版支持小程序编译的技术解析
  • 免费行情网站app斗印wordpress增加内存分配给php
  • mysql高可用架构之MHA部署(一)(保姆级)
  • MySQL索引优化实战从慢查询到高性能的解决方案
  • 力扣每日一题(二)任务安排问题 + 区间变换问题 + 排列组合数学推式子
  • LeetCode-33.搜索旋转排序数组-二分查找
  • R语言基础入门详细教程
  • 用wordpress建立学校网站吗人工智能教育培训机构排名
  • 网站及其建设的心得体会wordpress能做大站吗
  • Java SpringMVC(二) --- 响应,综合性练习
  • 【保姆级教程】VMware Workstation Pro 17安装及基础使用
  • 网站开发源代码mvc电子商务网站建设与管理实训报告
  • Bootstrap4 提示框详解
  • 数据分析硬件配置——选购计算机
  • 在Java中,如何实现封装?
  • 【实录】使用 patch-package 修复第三方 npm 包中的 Bug
  • Warm-Flow 1.8.2版本发布|新增功能和优化,体验更稳定
  • 电池组PACK自动化生产线介绍|深圳比斯特自动化
  • 云手机的挂机功能涉及到哪些内容