【Java8新特性】- Optional应用
2024-09-08 11:23:09
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);
}
类方法
工作繁忙也需要学习。
创作不易,如有错误请指正,感谢观看!记得点赞哦!
最新文章
- IE7 浏览器下面设置text-indent属性变成margin属性BUG
- 判断是否安装APP
- python用来压缩目录的脚本
- php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库、PDO教程]
- MaxMin搜索
- char a[] = ";hello";; char c[] = {&#39;h&#39;,&#39;e&#39;,&#39;l&#39;,&#39;l&#39;,&#39;o&#39;}; int b[] = {1, 2, 3, 4, 5};的长度区别,及内存中空间开辟情况
- Android WebView 开发详解(二)
- openerp import namespace
- [转]Delphi : keydown与keypress的区别,组合键
- 生成getter()、setter()方法去掉变量前缀
- hdu 3076 ssworld VS DDD (概率dp)
- ELK搭建
- Django之会议室预预订
- LAB1 partIV
- Beautiful Numbers(牛客网)
- 代码重定位和位置无关码——运行于nor flash
- CPP_封装_继承_多态
- bzoj千题计划156:bzoj1571: [Usaco2009 Open]滑雪课Ski
- 得到DataGrid列的值
- Debian 安装记录
热门文章
- SpringCloud微服务实战——搭建企业级开发框架(四十五):【微服务监控告警实现方式二】使用Actuator(Micrometer)+Prometheus+Grafana实现完整的微服务监控
- 【安全通告】关于 DolphinScheduler 漏洞情况的说明
- ajax.readyState与ajax.status一览
- django中的静态文件
- kafka手动设置offset
- ettercap之dns欺骗攻击
- OID天下第一 (双指针,LCT,线段树)
- 检查原生 JavaScript 函数是否被覆盖
- 使用RandomAccessFile实现数据的插入效果
- django_day05