Java8新特性 - Optional容器类
Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用null 表示一个值不存在,现在Optional 可以更好的表达这个概念。并且可以避免空指针异常。
- Optional.of(T t) : 创建一个Optional 实例
- Optional.empty() : 创建一个空的Optional 实例
- Optional.ofNullable(T t):若t 不为null,创建Optional 实例,否则创建空实例
- isPresent() : 判断是否包含值
- orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
- orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回s 获取的值
- map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
- flatMap(Function mapper):与map 类似,要求返回值必须是Optional
示例代码:
public class TestOptional {
public static void main(String[] args) {
// Optional.of(T t):封装一个Optional实例,其中值t不能为null,否则有NullPointException
Optional<Demo> optional1 = Optional.of(new Demo());
System.out.println(optional1.get());
// 运行结果:Demo{name='null', age=null, salary=null, status=null}
// Optional.empty():封装一个空的Optional对象(封装null)
Optional<Demo> optional2 = Optional.empty();
System.out.println(optional2.get());
// 运行结果:Exception in thread "main" java.util.NoSuchElementException: No value present
// at java.util.Optional.get(Optional.java:135)
// at TestOptional.main(TestOptional.java:16)
// Optional.ofNullable(T t):非null就和of方法一样,null就和empty()一样
Optional<Demo> optional3 = Optional.ofNullable(new Demo());
// isPresent():判断其中是否包含值
if (optional3.isPresent()) {
System.out.println(optional3.get());
}
// 运行结果:Demo{name='null', age=null, salary=null, status=null}
// orElse(T t) : 如果包含值,那返回值;否则返回替代值T
Optional<Demo> optional4 = Optional.ofNullable(null);
Demo demo1 = optional4.orElse(new Demo("里斯", 24, 15000.1, Demo.Status.FREE));
System.out.println(demo1);
// 运行结果:Demo{name='里斯', age=24, salary=15000.1, status=FREE}
// orElseGet(Supplier s) :如果包含值,那返回值;否则返回s 获取的值
Demo demo2 = optional4.orElseGet(() -> new Demo());
System.out.println(demo2);
// 运行结果:Demo{name='null', age=null, salary=null, status=null}
// map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
Optional<Demo> optional5 = Optional.ofNullable(new Demo("里斯", 24, 15000.1, Demo.Status.FREE));
Optional<String> stringOptional1 = optional5.map(x -> x.getName());
System.out.println(stringOptional1.get());
// 运行结果:里斯
// flatMap(Function mapper):与map 类似,要求返回值必须是Optional
Optional<String> stringOptional2 = optional5.flatMap(x -> Optional.of(x.getName()));
System.out.println(stringOptional2.get());
// 运行结果:里斯
}
}
Java8新特性 - Optional容器类的更多相关文章
- java8 新特性 Optional容器类
public class Godness { private String name; public Godness() { } public Godness(String name) { this. ...
- Java8 新特性 Optional 类
Optional 类的简介 Optional类的是来自谷歌Guava的启发,然后就加入到Java8新特性中去了.Optional类主要就是为子决解价值亿万的错误,空指针异常. Optional ...
- JAVA8新特性Optional,非空判断
Optional java 的 NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨, 有大佬说过 "防止 NPE,是程序员的基本修养." 但是修养归 ...
- Java8新特性——Optional
前言 在开发中,我们常常需要对一个引用进行判空以防止空指针异常的出现.Java8引入了Optional类,为的就是优雅地处理判空等问题.现在也有很多类库在使用Optional封装返回值,比如Sprin ...
- Java8新特性--Optional
Java 8引入了一个新的Optional类.Optional类的Javadoc描述如下: 这是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会 ...
- Java8新特性Optional、接口中的默认方法与静态方法
Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...
- java8 新特性 -Optional的常见用法
1. Optional 一. 简介 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题.本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为 ...
- Java8新特性——Optional类的使用(有效的避免空指针异常)
OPtional类的使用 概述 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guav ...
- 【Java8新特性】- Optional应用
Java8新特性 - Optional应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
随机推荐
- 阿里云yii2 composer update 很慢的解决办法
先执行如下语句 composer global require "fxp/composer-asset-plugin:dev-master" 再执行 composer update
- Java 中如何输入
import java.util.Scanner; //键盘扫描类public class Test{public static void main(String[] args) {Scanner i ...
- Android页面切换
参考地址: http://www.crifan.com/android_how_to_create_new_ui_and_switch_to_another_new_ui/ 想要实现,在Android ...
- android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)
Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下 以前使用的是jar包 导入来实现高德定位 老版本 链接:https://www.cnblogs. ...
- Shell中 2>/dev/null
1.文件描述符 Linux系统预留可三个文件描述符:0.1和2,他们的意义如下所示: 0——标准输入(stdin) 1——标准输出(stdout) 2——标准错误(stderr) 标准输出——stdo ...
- 编译Flink 1.9.0
闲来无事,编个Flink 1.9 玩玩 1.下载flink.flink-shaded 源码.解压 flink flink-shaded 7.0 [venn@venn release]$ ll tota ...
- Flink统计当日的UV、PV
Flink 统计当日的UV.PV 测试环境: flink 1.7.2 1.数据流程 a.模拟数据生成,发送到kafka(json 格式) b.flink 读取数据,count c. 输出数据到kafk ...
- layer confirm 三种选择按钮
layer.confirm('请选择是否通过提现?(tips:同意直接打款,驳回不可恢复)', { btn : ['通过-打款','不通过','通过-已打款'], btn1:function(){ a ...
- LODOP设置打印份数及是否逐份输出
LODOP中通过SET_PRINT_COPIES可以设置打印份数,例如:LODOP.SET_PRINT_COPIES(2);//指定份数为2份 如果一个任务里有多页,打印份数的时候,有两种输出方式,一 ...
- Swoole练习 TCP
TCP <?php $serv = new swoole_server("127.0.0.1", 9501); //监听连接进入事件 $serv->on('connec ...