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类的使用(有效的避免空指针异常)
OPtional类的使用 概述 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guav ...
-
Java8 新特性之流式数据处理
一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包含整数的 ...
-
Java8 新特性之流式数据处理(转)
转自:https://www.cnblogs.com/shenlanzhizun/p/6027042.html 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作 ...
随机推荐
-
新增PHP经典笔记
[设置编码] header("Content-type: text/html; charset=utf-8"); 1. parse_url - 解析 URL,返回其组成部分 $ua ...
-
Android开发中Eclipse里的智能提示设置
今天开始学习一下Android开发,直接在Android Developers下载的一个开发工具包,然后再下了一个JDK,配置完环境变量等一系列的工作后环境就搭建好了,在新建好第一个Android项目 ...
-
【LeetCode】Symmetric Tree 推断一棵树是否是镜像的
题目:Symmetric Tree <span style="font-size:18px;"><span style="font-size:18px; ...
-
JSP 核心 (等待更新)
开篇:JSP的等同于servlet 编译器将其转化为.class,后执行.一旦配置在Tomcat webapps,运行访问后,在Tomcat--->work文件内出现java文件,其内容即为转化 ...
-
【重要】使用Git命令行上传到GitHub上
[本人GitHub账号:] 用户名:chenhongshuang 密码:shuangshuang6300 邮箱:2452420371@qq.com 进入GitHub账号后 1·新建项目文件名称例dem ...
-
sed memo 2
配置文件注释过滤 示例文件 [user_00@txyun test]$ cat sed_test # comment aaaaaaaaaaa bbbb #comment cccc dddd fffo ...
-
百度Hr分享,一个合格的数据工程师简历中必备技能?
如果你是一名数据科学方面的求职者,你肯定想知道在简历上写些什么才能获得面试的机会:如果你想进入这个领域,你一定想知道具备哪些技术才能成为一名有竞争力的求职者. 在本文中,我们对Indeed中一千份数据 ...
-
static变量的特点 - 只会有一份成员对象
1. public class HasStatic{ 2. private static int x=100; 3. public static void main(String ...
-
unity3D总结的一些细节,不注意有些要折腾非常多天!
1. 注意!!ps保存图片时,若保存为ps格式,若关闭最大兼容将会导致unity导入失败!(n天) 2.switch 推断NGUI popuplist传来的value字符串时一定要trim一下去掉空格 ...
-
不要在linux上启用net.ipv4.tcp_tw_recycle参数
不要在linux上启用net.ipv4.tcp_tw_recycle参数 发布于 2015/07/27 莿鸟栖草堂 本文为翻译英文BLOG<Coping with the TCP TIME-WA ...