千家信息网

怎么浅析Java9 Optional API的新增方法

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,怎么浅析Java9 Optional API的新增方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. or 方法有时当Optiona
千家信息网最后更新 2025年11月07日怎么浅析Java9 Optional API的新增方法

怎么浅析Java9 Optional API的新增方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1. or 方法

有时当Optional为空时,我们想执行一些其他逻辑并也返回Optional。在Java9之前Optional类仅有orElse()和orElseGet()方法,但两者都返回非包装值。

Java9引入or()方法当Optional为空时返回另一个Optional。如果Optional有定义值,则传入or方法的lambda不被执行:

@Testpublic void givenOptional_whenPresent_thenShouldTakeAValueFromIt() {

//given String expected = "properValue";

Optional value = Optional.of(expected);

Optional defaultValue = Optional.of("default");

//when Optional result = value.or(() -> defaultValue);

//then assertThat(result.get()).isEqualTo(expected);}

另外当Optional为空时,返回值同样是defaultValue:

@Testpublic void givenOptional_whenEmpty_thenShouldTakeAValueFromOr() {

// given String defaultString = "default";

Optional value = Optional.empty();

Optional defaultValue = Optional.of(defaultString);

// when Optional result = value.or(() -> defaultValue);

// then assertThat(result.get()).isEqualTo(defaultString);}

2. ifPresentOrElse 方法

假设有个Optional实例,通常我们需要对其包装的值执行特定业务,同时如果Optional实例为空时需增加一些度量用于记录或跟踪该事实。

ifPresentOrElse()方法就是为该场景而创建。我们可以传入一个Consumer用于执行Optional存在时,而Runnable用于在Optional为空时执行。

下面示例中,Optional存在,我们需要在值存在时增加特定计数器:

@Testpublic void givenOptional_whenPresent_thenShouldExecuteProperCallback() {

// given Optional value = Optional.of("properValue");

AtomicInteger successCounter = new AtomicInteger(0);

AtomicInteger onEmptyOptionalCounter = new AtomicInteger(0);

// when value.ifPresentOrElse( v -> successCounter.incrementAndGet(), onEmptyOptionalCounter::incrementAndGet);

// then assertThat(successCounter.get()).isEqualTo(1);

assertThat(onEmptyOptionalCounter.get()).isEqualTo(0);}

注意,传入的回调参数没有被执行,下面看如何Optional为空时,回调参数将会执行:

@Testpublic void givenOptional_whenNotPresent_thenShouldExecuteProperCallback() {

// given Optional value = Optional.empty();

AtomicInteger successCounter = new AtomicInteger(0);

AtomicInteger onEmptyOptionalCounter = new AtomicInteger(0);

// when value.ifPresentOrElse( v -> successCounter.incrementAndGet(), onEmptyOptionalCounter::incrementAndGet);

// then assertThat(successCounter.get()).isEqualTo(0);

assertThat(onEmptyOptionalCounter.get()).isEqualTo(1);}

3. stream方法

最后一个方法,Java 9 给Optional类增加的stream()方法。

Java有非常流畅、优雅的Stream Api,用于操作集合实现函数式编程概念。Java 9 在Optional类中引入stream()方法,让我们把Optional实例视为Stream。

加入我们定义了一个Optional,并执行它的stream()方法,则会创建一个元素的流,使得Stream的所有Api都可以使用:

@Testpublic void givenOptionalOfSome_whenToStream_thenShouldTreatItAsOneElementStream() {

// given Optional value = Optional.of("a");

// when List collect = value.stream().map(String::toUpperCase).collect(Collectors.toList());

// then assertThat(collect).hasSameElementsAs(List.of("A"));}

另外,Optional不存在时,调用stream方法返回空流:

@Testpublic void givenOptionalOfNone_whenToStream_thenShouldTreatItAsZeroElementStream() {

// given Optional value = Optional.empty();

// when List collect = value.stream() .map(String::toUpperCase) .collect(Collectors.toList());

// then assertThat(collect).isEmpty();}

在空Stream上的操作没有任何效果,但因为steam方法,我们可以链接Optional api和Stream api,使得代码更优雅、流畅。

我们介绍了Java 9 Optional Api新增的三个方法。or方法在Optional为空时返回Optional对象。 ifPresentOrElse()在值存在时执行Consumer参数,反之执行另一个参数回调参数。最后是Optional的stream()方法提供流API实现链式操作。

看完上述内容,你们掌握怎么浅析Java9 Optional API的新增方法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

方法 参数 实例 流畅 优雅 内容 更多 问题 包装 束手无策 为此 三个 业务 事实 代码 会创 元素 函数 加入我们 原因 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 合肥今日互联网科技有限公司 英国客票网络安全 空岛战争服务器为什么进不去 网络安全领域最突出问题 数据库关系运算更名 软件开发类英文原著 y服务器 软件开发的增量过程模型适用于 网信办下属网络安全审查 cod战区亚服服务器在哪 确保网络安全的基本思路 国家网络安全宣传周 武汉 论文数据库怎么排名 外文数据库检索代码含义 软件开发是从几零年代开始的 软件开发的产品出售 删除ftp服务器配置 itc服务器主机正常 xp系统 配置服务器 数据库同时打开两个链接 点击确定显示数据库已连接 四川新华学软件开发就业怎么样 数据库中的控制标识y和n区别 深圳市众友互联网络科技有限公司 网络技术总监主要负责人 软件开发速度越来越慢 广州提莫互联网科技有限公司 手机是否可以作为服务器 用户信息网络安全管理制度 校盟互联网科技
0