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

Java8之Optional类的基本使用

文章目录

  • 一、简介
  • 二、常见的Optional用法:
    • 1、创建Optional对象:
      • 1.1 使用of()方法:
      • 1.2 使用ofNullable()方法:
      • 1.3 使用empty()方法:
    • 2、判断Optional是否包含值:
      • 2.1 使用isPresent()方法:
    • 3、获取Optional中的值:
      • 3.1 使用get()方法:
      • 3.2 使用orElse()方法:
      • 3.3 使用orElseGet()方法:
      • 3.4 使用orElseThrow()方法:
    • 4、转换Optional中的值:
      • 4.1 使用map()方法:
      • 4.2 使用flatMap()方法:

一、简介

  • Optional是一个容器对象,它可能包含某个值,也可能不包含。
  • 它的设计目的是为了解决空指针异常问题。
  • 使用Optional可以避免在代码中显式地检查null值,从而使代码更加简洁和可读。

二、常见的Optional用法:

1、创建Optional对象:

1.1 使用of()方法:

创建一个包含指定非null值的Optional对象。

下面是一个使用of()方法创建Optional对象的示例:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {String value = "Hello World!";Optional<String> optional = Optional.of(value);// 检查Optional是否包含值if (optional.isPresent()) {System.out.println("Optional包含值: " + optional.get());} else {System.out.println("Optional为空");}}
}

在这个示例中,我们使用of()方法创建了一个包含非null值的Optional对象。然后我们通过调用isPresent()方法检查Optional是否包含值。如果Optional包含值,则调用get()方法获取该值并打印输出;否则打印输出Optional为空。

输出结果为:

Optional包含值: Hello World!

注意:使用of()方法时,如果传入的值为null,会立即抛出NullPointerException异常。因此,在使用of()方法创建Optional对象时,需要确保传入的值不为空。如果值可能为空,可以使用ofNullable()方法创建Optional对象,该方法可以接受null值。

1.2 使用ofNullable()方法:

创建一个包含指定值的Optional对象,如果值为null,则创建一个空的Optional对象。

下面是一个使用ofNullable()方法创建Optional对象的示例:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {String value = null;Optional<String> optional = Optional.ofNullable(value);// 检查Optional是否包含值if (optional.isPresent()) {System.out.println("Optional包含值: " + optional.get());} else {System.out.println("Optional为空");}}
}

在这个示例中,我们使用ofNullable()方法创建了一个包含指定值的Optional对象。如果值为null,则创建一个空的Optional对象。然后我们通过调用isPresent()方法检查Optional是否包含值。如果Optional包含值,则调用get()方法获取该值并打印输出;否则打印输出Optional为空。

输出结果为:

Optional为空

注意:使用ofNullable()方法创建的Optional对象可以接受null值,不会立即抛出NullPointerException异常。这样可以更灵活地处理可能为空的值。

1.3 使用empty()方法:

创建一个空的Optional对象。

下面是一个使用empty()方法创建空的Optional对象的示例:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {Optional<String> optional = Optional.empty();// 检查Optional是否包含值if (optional.isPresent()) {System.out.println("Optional包含值: " + optional.get());} else {System.out.println("Optional为空");}}
}

在这个示例中,我们使用empty()方法创建了一个空的Optional对象。然后我们通过调用isPresent()方法检查Optional是否包含值。由于我们使用empty()方法创建的Optional对象是空的,所以isPresent()返回值为false,程序会打印输出Optional为空。

输出结果为:

Optional为空

使用empty()方法创建的Optional对象始终是空的,不包含任何值。这在某些情况下可以用于表示缺失值。

2、判断Optional是否包含值:

2.1 使用isPresent()方法:

如果Optional对象包含值,则返回true,否则返回false。

3、获取Optional中的值:

3.1 使用get()方法:

如果Optional对象包含值,则返回该值,否则抛出NoSuchElementException异常。

下面是一个示例代码:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {Optional<String> optional = Optional.of("Hello World");try {String value = optional.get();System.out.println("Optional的值: " + value);} catch (NoSuchElementException e) {System.out.println("Optional为空");}}
}

在这个示例中,我们使用of()方法创建一个非空的Optional对象,并将字符串"Hello World"作为值传递给它。然后,我们使用get()方法获取Optional对象的值,并进行相应的操作。

输出结果为:

Optional的值: Hello World

如果我们将Optional对象设为空:

Optional<String> optional = Optional.empty();

则optional.get()会抛出NoSuchElementException异常,因为Optional对象为空。

请注意,使用get()方法时,一定要先使用isPresent()方法来检查Optional对象是否包含值,以避免抛出异常。

3.2 使用orElse()方法:

如果Optional对象包含值,则返回该值,否则返回指定的默认值。

以下是一个示例代码:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {Optional<String> optional = Optional.of("Hello World");String value = optional.orElse("Default Value");System.out.println("Optional的值: " + value);}
}

在这个示例中,我们使用of()方法创建一个非空的Optional对象,并将字符串"Hello World"作为值传递给它。然后,我们使用orElse()方法获取Optional对象的值,如果Optional对象为空,则返回指定的默认值"Default Value"。

输出结果为:

Optional的值: Hello World

如果我们将Optional对象设为空:

Optional<String> optional = Optional.empty();

则optional.orElse(“Default Value”)会返回指定的默认值"Default Value",因为Optional对象为空。

使用orElse()方法时,可以避免抛出异常,并且可以提供一个默认值来处理Optional对象为空的情况。

3.3 使用orElseGet()方法:

如果Optional对象包含值,则返回该值,否则通过调用Supplier接口提供的方法来生成一个默认值。

以下是一个示例代码:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {Optional<String> optional = Optional.empty();String value = optional.orElseGet(() -> generateDefaultValue());System.out.println("Optional的值: " + value);}public static String generateDefaultValue() {System.out.println("生成默认值");return "Default Value";}
}

在这个示例中,我们使用empty()方法创建一个空的Optional对象。然后,我们使用orElseGet()方法获取Optional对象的值,如果Optional对象为空,则通过调用generateDefaultValue()方法生成一个默认值。

generateDefaultValue()方法是一个自定义的方法,用于生成默认值。在这个示例中,我们简单地打印一条消息 “生成默认值”,然后返回默认值 “Default Value”。

输出结果为:

生成默认值
Optional的值: Default Value

由于Optional对象为空,因此会调用generateDefaultValue()方法生成默认值。

使用orElseGet()方法时,可以通过Supplier接口提供更灵活的方式来生成默认值,例如使用lambda表达式或方法引用。这使得我们可以根据需要动态生成默认值。

3.4 使用orElseThrow()方法:

如果Optional对象包含值,则返回该值,否则通过调用Supplier接口提供的方法来抛出指定的异常。

以下是一个示例代码:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {Optional<String> optional = Optional.empty();try {String value = optional.orElseThrow(() -> new IllegalArgumentException("值为空"));System.out.println("Optional的值: " + value);} catch (IllegalArgumentException e) {System.out.println("捕获到异常: " + e.getMessage());}}
}

在这个示例中,我们使用empty()方法创建一个空的Optional对象。然后,我们使用orElseThrow()方法获取Optional对象的值,如果Optional对象为空,则通过调用Supplier接口提供的方法来抛出指定的异常。

在这个示例中,我们使用lambda表达式() -> new IllegalArgumentException(“值为空”)作为Supplier接口的实现,当Optional对象为空时,会抛出IllegalArgumentException异常,并指定异常的消息为 “值为空”。

输出结果为:

捕获到异常: 值为空

由于Optional对象为空,因此会抛出IllegalArgumentException异常,并打印异常的消息。

使用orElseThrow()方法时,可以通过Supplier接口提供更灵活的方式来抛出异常,例如使用lambda表达式或方法引用。这使得我们可以根据需要动态地抛出不同的异常。

4、转换Optional中的值:

4.1 使用map()方法:

对Optional中的值进行转换,并返回一个新的Optional对象。

以下是一个示例代码:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {Optional<String> optional = Optional.of("Hello");Optional<String> result = optional.map(value -> value + " World");System.out.println("转换后的Optional的值: " + result.orElse(""));}
}

在这个示例中,我们使用of()方法创建一个包含值为"Hello"的Optional对象。然后,我们使用map()方法对值进行转换,将其与" World"拼接起来。最后,我们使用orElse()方法获取转换后的值,如果转换后的Optional对象为空,则返回一个空字符串。

输出结果为:

转换后的Optional的值: Hello World

由于Optional对象包含值,因此map()方法会将值与" World"拼接起来,并返回一个新的Optional对象。最后,我们通过orElse()方法获取转换后的值,并打印到控制台。

使用map()方法可以方便地对Optional对象的值进行转换,而不需要进行额外的空值检查。这使得代码更加简洁和易读。

4.2 使用flatMap()方法:

对Optional中的值进行转换,并返回一个新的Optional对象。

以下是一个示例代码:

import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {Optional<String> optional = Optional.of("Hello");Optional<String> result = optional.flatMap(value -> Optional.of(value + " World"));System.out.println("转换后的Optional的值: " + result.orElse(""));}
}

在这个示例中,我们使用of()方法创建一个包含值为"Hello"的Optional对象。然后,我们使用flatMap()方法对值进行转换,将其与" World"拼接起来,并使用of()方法将结果包装成一个新的Optional对象。最后,我们使用orElse()方法获取转换后的值,如果转换后的Optional对象为空,则返回一个空字符串。

输出结果为:

转换后的Optional的值: Hello World

由于Optional对象包含值,因此flatMap()方法会将值与" World"拼接起来,并返回一个新的Optional对象。最后,我们通过orElse()方法获取转换后的值,并打印到控制台。

使用flatMap()方法可以方便地对Optional对象的值进行转换,并且可以链式调用多个转换操作。这使得代码更加灵活和易读。

http://www.lryc.cn/news/125549.html

相关文章:

  • LinuxPTP时间同步
  • 【Django】Task1安装python环境及运行项目
  • 00 - 环境配置
  • R语言实现计算净重新分类指数(NRI)和综合判别改善指数(IDI)
  • 【面试总结】八股①
  • AI绘画 | 一文学会Midjourney绘画,创作自己的AI作品(快速入门+参数介绍)
  • MongoDB 数据库详细介绍
  • Qt在mac安装
  • STM32 F103C8T6学习笔记1:开发环境与原理图的熟悉
  • 【Linux命令详解 | ps命令】 ps命令用于显示当前系统中运行的进程列表,帮助监控系统状态。
  • “超越传统的HTTP请求:深度解析Axios,打造前端开发的终极利器“
  • 【Tomcat】tomcat的多实例和动静分离
  • Python爬虫IP代理池的建立和使用
  • Java面试题(dubbo)
  • JVM源码剖析之Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded异常
  • 使用PDF文件入侵任何操作系统
  • 强训第32
  • vue3 setup+Taro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造
  • git命令使用
  • 每日记--前端解决方案--el-select下拉样式-el-option内容过长-鼠标悬停到文字不修改光标样式-设置透明
  • Windows系统Git安装教程(详细Git安装过程)
  • 前后端分离------后端创建笔记(11)用户删除
  • 24、springboot的自动配置01--类条件注解@ConditionalOnClass、bean条件注解@ConditionalOnBean
  • 婚恋交友h5多端小程序开源版开发
  • uniapp案例30余种实战项目
  • 回归预测 | MATLAB实现GRNN广义回归神经网络多输入多输出预测
  • 从零开始学习VBA(一)
  • Kotlin Executors线程池newSingleThreadExecutor单线程
  • ZooKeeper介绍
  • 首起针对国内金融企业的开源组件投毒攻击事件