Java8新特性:Optional类(超详解)

这篇具有很好参考价值的文章主要介绍了Java8新特性:Optional类(超详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!



一、Optional类的出现

到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。

二、Optional类概述

Optional 类(java.util.Optional)是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用 null 表示一个值不存在,现在Optional 可以更好的表达这个概念。并且可以避免空指针异常。

Optional类的Javadoc描述如下:这是一个可以为null的容器对象。如果值存在则 isPresent() 方法会返回 true,调用 get() 方法会返回该对象。文章来源地址https://www.toymoban.com/news/detail-405822.html

三、Optional类常用方法

1. 创建Optional类对象的方法

方法 描述
Optional.of(T t) 创建一个 Optional 实例,t必须非空
Optional.empty() 创建一个空的 Optional 实例
Optional.ofNullable(T t) t可以为nul

2. 判断Optional容器中是否包含对象

方法 描述
boolean isPresent() 判断是否包含对象
void ifPresent(Consumer<? super T> consumer) 如果有值,就执行Consumer接口的实现代码,并且该值会作为参数传给它。

3. 获取Optional容器的对象

方法 描述
T get() 如果调用对象包含值,返回该值,否则抛异常
T orElse(T other) 如果有值则将其返回,否则返回指定的other对象
T orElseGet(Supplier<? extends T> other) 如果有值则将其返回,否则返回由Supplier接口实现提供的对象
T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果有值则将其返回,否则抛出由Supplier接口实现提供的异常

四、代码演示

@Test
public void test1() {
	Boy b = new Boy("张三");
	Optional<Girl> opt = Optional.ofNullable(b.getGrilFriend());
	// 如果女朋友存在就打印女朋友的信息
	opt.ifPresent(System.out::println);
}
@Test
public void test2() {
	Boy b = new Boy("张三");
	Optional<Girl> opt = Optional.ofNullable(b.getGrilFriend());
	// 如果有女朋友就返回他的女朋友,否则只能欣赏“嫦娥”了
	Girl girl = opt.orElse(new Girl("嫦娥"));
	System.out.println("他的女朋友是:" + girl.getName());
}
@Test
public void test3(){
	Optional<Employee> opt = Optional.of(new Employee("张三", 8888));
	//判断opt中员工对象是否满足条件,如果满足就保留,否则返回空
	Optional<Employee> emp = opt.filter(e -> e.getSalary()>10000);
	System.out.println(emp);
}
@Test
public void test4(){
	Optional<Employee> opt = Optional.of(new Employee("张三", 8888));
	//如果opt中员工对象不为空,就涨薪10%
	Optional<Employee> emp = opt.map(e -> {e.setSalary(e.getSalary()%1.1);return e;});
	System.out.println(emp);
}

到了这里,关于Java8新特性:Optional类(超详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java8新特性,java17新特性

    目前使用最多的jdk版本 相较jdk7主要不同在于 Lambda 表达式和函数式编程 : JDK 8 引入了 Lambda 表达式,使得函数式编程更加便捷。Lambda 表达式允许将函数作为参数传递给方法,以及在集合的操作中更简洁地进行数据处理。 新增的 java.util.function 包提供了函数式接口(如 Funct

    2024年02月11日
    浏览(25)
  • java8 新特性

    1、lambda表达式 Lambda 是一个 匿名函数,我们可以把 Lambda 表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。 (1)语法 Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。这个操作符为 “-” , 该操作

    2024年02月09日
    浏览(28)
  • Java8常用新特性

    目录 简介 1.默认方法 2..Lambda表达式 3.Stream API 4.方法引用 5.Optional类 Java 8是Java编程语言的一个重要版本,引入了许多令人兴奋和强大的新特性。这些特性使得Java程序更加现代化、灵活和高效。让我们一起来探索一些Java 8的常用新特性吧! 首先,Java 8引入了函数式编程的概念

    2024年01月22日
    浏览(26)
  • JAVA8~17新特性

    目录 一、前言 二、JAVA8 Lambda表达式 Stream API 创建方式 中间操作 终止操作 Optional类 三、JAVA9 模块机制 JShell交互式编程   接口 新增集合工厂方法 四、JAVA10 局部变量类型判断 五、JAVA11 Lambda表达式补充 String方法的补充 全新的HttpClient 使用 六、JAVA12-16 新的switch语法 文本块 新

    2024年02月15日
    浏览(27)
  • Java8新特性-流式操作

    在Java8中提供了新特性—流式操作,通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行,提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢? 目录 什

    2024年02月02日
    浏览(29)
  • Java8新特性整理记录

    方法一:  方法二:   例子:

    2024年02月11日
    浏览(24)
  • Java8新特性—方法引用

    前言 Java 8引入了方法引用(method reference)作为一种语言特性,它可以简化代码,使得代码更加易读和易于维护。方法引用可以被视为Lambda表达式的简写形式,可以用来替代Lambda表达式中只调用一个已有方法的情况。总的来说该特性使得Java代码更加简洁和灵活。 使用场景 J

    2024年02月03日
    浏览(27)
  • Java8的新特性以及使用

    1.   通 过 1 0 个示 例 来 初 步认 识 J a v a 8 中 的 l a m bd a 表达 式   我个 人 对 J a v a   8 发 布 非 常 激动 , 尤 其 是 l a m b d a 表 达式 和 流 AP I 。 越 来 越 多 的 了解 它 们 , 我 能 写 出 更 干 净 的代 码 。 虽然 一 开 始 并 不 是 这 样 。 第一 次 看 到 用 la m b d a 表

    2024年02月07日
    浏览(33)
  • Java8新特性lambda学习

    Lambda是一个 匿名函数 ,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 本质: 作为 函数式接口 的实例, 没有接口就没意义了. 这两

    2024年02月05日
    浏览(29)
  • 【Java8新特性--->异步处理】CompletableFuture

    一、引入 假设一个商品详情页需要以下操作: 查询展示商品的基本信息耗时:0.5s 查询展示商品的销售信息耗时:0.7s 查询展示商品的图片信息耗时:1s 查询展示商品销售属性耗时:0.3s 查询展示商品规格属性耗时:1.5s 查询展示商品详情信息耗时:1s 即使每个查询时间耗时不

    2024年02月06日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包