Java8新特性 - Optional应用

生命不息,写作不止

继续踏上学习之路,学之分享笔记

总有一天我也能像各位大佬一样

一个有梦有戏的人 @怒放吧德德

分享学习心得,欢迎指正,大家一起学习成长!

简介

Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。

Optional 类的引入很好的解决空指针异常。

Optional判断是否为空

optional提供了两种方法,一个是ofNullable(args),这个是可以传递空对象,并且不会出现空指针异常;另一个是of(args),这个一旦传递空对象,就会报空指针异常。

public static void main(String[] args) {
Integer integer = null;
Optional<Integer> optionalInteger = Optional.ofNullable(integer);
Optional.of(integer);
}

在ofNullable方法是不会报出空指针,而在of方法时,对象为空则会空指针异常。

通过Optional的ofNullable可以判断对象是否为空,并且能够返回一个Optional的对象,这个对象可以通过get()方法来得到相应的类型,并且二者的hashcode是一致的。

Student student = new Student("lyd", 99);
Optional<Student> optionalInteger = Optional.ofNullable(student);
Student i = optionalInteger.get();
System.out.println("原本的hashcode: " + student.hashCode());
System.out.println("Optional的hashcode: " + i.hashCode());

结果:

通过Optional.ofNullable(student).isPresent() 来判空,isPresent结果为true表示不为空,isPresent返回为false表示为空。

Optional设定默认值

Option提供了可以设置默认值的方法,可以令为空的对象初始化默认值。

public static void main(String[] args) {
Integer num = null;
Integer number = 18;
Integer orElse = Optional.ofNullable(num).orElse(12);
Integer anElse = Optional.ofNullable(number).orElse(12);
System.out.println("orElse: " + orElse);
System.out.println("anElse: " + anElse);
}

结果输出

orElse: 12
anElse: 18

Optional过滤

optional可以实现参数过滤,可以自己重写过滤规则。与Stream流过滤一样,也是通过实现匿名内部类new Predicate得到。

public static void main(String[] args) {
Integer n = 18;
Optional<Integer> num = Optional.ofNullable(n);
Integer integer = num.filter(number -> number > 5).get();
System.out.println(integer);
}

类方法

工作繁忙也需要学习。

创作不易,如有错误请指正,感谢观看!记得点赞哦!

【Java8新特性】- Optional应用的更多相关文章

  1. Java8 新特性 Optional 类

    Optional 类的简介   Optional类的是来自谷歌Guava的启发,然后就加入到Java8新特性中去了.Optional类主要就是为子决解价值亿万的错误,空指针异常.   Optional ...

  2. JAVA8新特性Optional,非空判断

    Optional java 的 NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨, 有大佬说过 "防止 NPE,是程序员的基本修养." 但是修养归 ...

  3. Java8新特性——Optional

    前言 在开发中,我们常常需要对一个引用进行判空以防止空指针异常的出现.Java8引入了Optional类,为的就是优雅地处理判空等问题.现在也有很多类库在使用Optional封装返回值,比如Sprin ...

  4. Java8新特性--Optional

    Java 8引入了一个新的Optional类.Optional类的Javadoc描述如下: 这是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会 ...

  5. java8 新特性 -Optional的常见用法

    1. Optional 一. 简介 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题.本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为 ...

  6. Java8新特性Optional、接口中的默认方法与静态方法

    Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...

  7. java8 新特性 Optional容器类

    public class Godness { private String name; public Godness() { } public Godness(String name) { this. ...

  8. Java8新特性——Optional类的使用(有效的避免空指针异常)

    OPtional类的使用 概述 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guav ...

  9. Java8新特性 - Optional容器类

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

随机推荐

  1. 密码学的基础:X.690和对应的BER CER DER编码

    目录 简介 BER编码 类型标识符 长度 内容 CER编码和DER编码 总结 简介 之前我们讲到了优秀的数据描述语言ASN.1,很多协议标准都是使用ASN.1来进行描述的.对于ASN.1来说,只定义了 ...

  2. Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_196 Python自动化,大概也许或者是今年最具热度的话题之一了.七月流火,招聘市场上对于Python自动化的追捧热度仍未消减,那 ...

  3. 8月份的.NET Conf 活动 专注于 .NET MAUI

    .NET Conf:Focus on MAUI 是一个为期一天的免费直播活动,将于太平洋时间 8 月 9 日上午 9 点开始,来自社区和 Microsoft 团队的演讲者们将分享使用MAUI .了解. ...

  4. 【springcloud】环境搭建与Rest使快速上手

    SpringCloud环境搭建 --- Rest使用 个人主页:https://www.cnblogs.com/xbudian/ 今天来到SpringCloud的学习,我们从spring boot微服 ...

  5. 针对多个球体的World类

    World类其他都一样的,就修改build函数就行了,以后测试所有代码,都是基于两个或多个球体的,不再重复阐述. void World::build() { vp.set_hres(200); vp. ...

  6. pytest自动化框架

    百度网盘链接:https://pan.baidu.com/s/1SvNRazeqHSy7sFHRtJz18w?pwd=0709 提取码:0709 插件: @pytest.mark.skip(reaso ...

  7. mui 登录跳转到首页之后顶部选项卡不灵敏问题

    前段时间开发一个用mui开发app的时候遇到了登录跳转到首页之后顶部选项卡会失灵的问题,多次尝试之后终于解决了,趁现在还有点印象记录一下吧. 一开始我是用mui.openWindow来新开首页的,出了 ...

  8. 痞子衡嵌入式:聊聊i.MXRT1170双核下不同GPIO组的访问以及中断设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170双核下不同GPIO组的访问以及中断设计. 在双核 i.MXRT1170 下设计应用程序,有一个比较重要的考虑点就是外 ...

  9. 搞定面试官 - MySQL 中你知道如何计算一个索引的长度嘛?

    大家好,我是程序员啊粥. 今天给大家分享一个我遇到过的比较少见的面试题,那就是 MySQL 中如何计算一个索引的长度. 说实话,我第一次遇到这个问题的时候想当然的以为索引长度就是我们建表时定义的字段长 ...

  10. LuoguP1016 旅行家的预算 (贪心)

    胡一个错误代码都能有75pts 忘了怎么手写deque其实是懒 #include <cstdio> #include <iostream> #include <cstri ...