java ifpresent_Java Optional ifPresentOrElse()用法及代码示例

java.util.Optional类的ifPresentOrElse(Consumer,Runnable)方法可帮助我们执行此Optional对象的值的指定消费者操作。如果此Optional中不存在值,则此方法执行给定的基于空的Runnable emptyAction,作为第二个参数传递

用法:

public void ifPresentOrElse(Consumer action,

Runnable emptyAction)

参数:此方法接受两个参数:

action:如果存在值,则是对此Optional所执行的操作。

emptyAction:如果不存在任何值,这是要执行的基于空的操作。

返回值:此方法不返回任何内容。

异常:如果存在一个值并且给定的操作为null,或者不存在任何值并且给定的基于空的操作为null,则此方法抛出NullPointerException。

以下示例程序旨在说明ifPresentOrElse()方法:

注意:由于此方法是在Java 9中添加的,因此程序需要JDK 9才能执行。

示例1:

// Java program to demonstrate

// Optional.ifPresentOrElse() method

import java.util.*;

public class GFG {

public static void main(String[] args)

{

// create a Optional

Optional op

= Optional.of(9455);

// print value

System.out.println("Optional: "

+ op);

// apply ifPresentOrElse

op.ifPresentOrElse(

(value)

-> { System.out.println(

"Value is present, its: "

+ value); },

()

-> { System.out.println(

"Value is empty"); });

}

}

输出:

Optional: Optional[9455]

Value is present, its: 9455

示例2:

// Java program to demonstrate

// Optional.ifPresentOrElse method

import java.util.*;

public class GFG {

public static void main(String[] args)

{

// create a Optional

Optional op

= Optional.empty();

// print value

System.out.println("Optional: "

+ op);

try {

// apply ifPresentOrElse

op.ifPresentOrElse(

(value)

-> { System.out.println(

"Value is present, its: "

+ value); },

()

-> { System.out.println(

"Value is empty"); });

}

catch (Exception e) {

System.out.println(e);

}

}

}

输出:

Optional: Optional.empty

Value is empty

### 推荐的Java版本及其使用场景 在选择合适的Java版本时,需综合考虑功能特性、性能表现以及生态系统的成熟度。以下是几个主流Java版本的特点及适用场景: #### Java 8 Java 8 是目前企业环境中广泛采用的一个稳定版本[^2]。它引入了许多重要的新特性,例如 Lambda 表达式、Stream API 和新的日期时间 API (java.time包),极大地提高了开发效率并简化了代码逻辑。 对于那些仍在维护旧有项目的团队来说,由于大量第三方框架和工具都已针对此版本进行了优化和支持,因此继续沿用 Java 8 可能是最稳妥的选择之一。然而,在安全性更新方面,Oracle 已停止对公共免费用户提供长期支持(LTS)[^1],这意味着如果要获得最新的安全补丁,则可能需要支付费用或者迁移到其他供应商如 Red Hat 或 Amazon Corretto 所提供的开源实现上。 #### Java 11 作为下一个长期支持(Long Term Support, LTS)版本,Java 11 自发布以来便受到广泛关注。相比起其前任者——即上述提到过的 Java 8 ——而言,除了继续保持向后的完全兼容之外,还增加了若干实用的功能改进,比如 HTTP Client API 改进了网络请求处理方式;新增字符串方法使操作更加便捷等等。 鉴于大多数现代 IDEs(集成开发环境), 构建工具(maven/gradle etc.)均已良好适配该平台,并且官方承诺至少五年内的免费安全修复计划,所以无论是新建项目还是逐步升级现有系统至更高标准的技术栈当中去,选用 Java 11 均不失为一种明智之举。 #### Java 17 最新发布的另一个LTS版号就是 Java 17 ,它延续着前两代产品的优良传统,持续推动语言本身向着更简洁优雅的方向演进的同时,也不忘强化底层基础设施建设来满足日益增长的应用需求 。举例来讲,“密封类”概念允许开发者更好地控制哪些子类可以继承某个特定父类;而 Pattern Matching for instanceof 则让类型转换变得更加直观自然。 尽管如此,考虑到生态系统尚未完全追赶上这一前沿领域的发展步伐,再加上部分遗留依赖项可能存在不匹配风险等问题的存在,故而在决定采纳之前务必做好详尽评估工作才行。 --- ### 不同Java版本间的兼容性考量 当涉及到跨多个 java 版本部署应用程序时,必须特别注意版本之间的兼容性问题。尤其是当你尝试利用较新版本独有的某些高级特性时,可能会遇到运行于较低级别 JVM 上失败的情况。 例如,`ifPresentOrElse` 方法是在 JDK9 中被首次引入到 Optional 类里的成员函数,用于提供更为灵活的结果处理机制。但在低于这个门槛线之下的环境下就没有办法直接调用了,这时就需要寻找相应的替代解决方案。具体做法可以通过组合运用现有的 `isPresent()` 和常规条件分支语句达成相同目的效果。 另外值得注意的一点是关于模块化系统(Project Jigsaw)带来的影响。自 Java 9 起实施的新架构改变了以往简单的 classpath 加载模式,转而采取基于命名空间隔离的方式管理各类库文件资源加载顺序关系网状结构图谱[^4]。这就要求我们在规划接口设计之初就要充分预见到未来可能出现的变化趋势,并制定相应预案措施加以应对防范未然。 ```java // 示例Java 9 的 ifPresentOrElse 替代方案适用于低版本 Optional<String> optionalValue = Optional.ofNullable(null); optionalValue.ifPresentOrElse( value -> System.out.println("Value is present: " + value), () -> System.out.println("No value present")); // 对应的 Java 8 实现如下: if (optionalValue.isPresent()) { String value = optionalValue.get(); System.out.println("Value is present: " + value); } else { System.out.println("No value present"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值