java十五章_Java8 教程第十五章之Optional 用法
本套JAVA8教程由于是有英文翻译过来的,如果有翻译不对的地方还请多多包涵。
本节课先简单的介绍下Java8有哪些新特性,对于Java6/7版本做出哪些更改.那废话不多说,赶紧开始今天的课程吧.
引子
Java 8在java.util包中引入了一个新类Optional。 它用于表示存在或不存在的值。 这个新构造的主要优点是没有太多的空检查和NullPointerException。 它避免了任何运行时NullPointerExceptions,并支持我们开发干净整洁的Java API或应用程序。 与集合和数组一样,它也是一个容纳最多一个值的容器。 让我们用一些有用的例子来探索这个新的构造。
那么在java8 中:
需要空检查
在运行时不再有NullPointerException
我们可以开发干净整洁的API
Optional 基础例子
public static void main(String[] args) {
Optional gender = Optional.of("MALE");
String answer1 = "Yes";
String answer2 = null;
System.out.println("Non-Empty Optional:" + gender);
System.out.println("Non-Empty Optional: Gender value : " + gender.get());
System.out.println("Empty Optional: " + Optional.empty());
System.out.println("ofNullable on Non-Empty Optional: " + Optional.ofNullable(answer1));
System.out.println("ofNullable on Empty Optional: " + Optional.ofNullable(answer2));
// java.lang.NullPointerException
System.out.println("ofNullable on Non-Empty Optional: " + Optional.of(answer2));
}
输出内容
Non-Empty Optional:Optional[MALE]
Non-Empty Optional: Gender value : MALE
Empty Optional: Optional.empty
ofNullable on Non-Empty Optional: Optional[Yes]
ofNullable on Empty Optional: Optional.empty
Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.Optional.(Optional.java:96)
at java.util.Optional.of(Optional.java:108)
at Java82.main(Java82.java:30)
Optional的map和flatMap用法
public static void main(String[] args) {
Optional nonEmptyGender = Optional.of("male");
Optional emptyGender = Optional.empty();
System.out.println("不为空 Optional:: " + nonEmptyGender.map(String::toUpperCase));
System.out.println("空 Optional :: " + emptyGender.map(String::toUpperCase));
Optional> nonEmptyOtionalGender = Optional.of(Optional.of("male"));
System.out.println("Optional value :: " + nonEmptyOtionalGender);
System.out.println("Optional.map :: " + nonEmptyOtionalGender.map(gender -> gender.map(String::toUpperCase)));
System.out.println("Optional.flatMap :: " + nonEmptyOtionalGender.flatMap(gender -> gender.map(String::toUpperCase)));
}
输出
不为空 Optional:: Optional[MALE]
空 Optional :: Optional.empty
Optional value :: Optional[Optional[male]]
Optional.map :: Optional[Optional[MALE]]
Optional.flatMap :: Optional[MALE]
Optional filter用法
public static void main(String[] args) {
Optional gender = Optional.of("MALE");
Optional emptyGender = Optional.empty();
//Filter on Optional
System.out.println(gender.filter(g -> g.equals("male"))); //Optional.empty
System.out.println(gender.filter(g -> g.equalsIgnoreCase("MALE"))); //Optional[MALE]
System.out.println(emptyGender.filter(g -> g.equalsIgnoreCase("MALE"))); //Optional.empty
}
输出
Optional.empty
Optional[MALE]
Optional.empty
Optional 中 isPresent 和 ifPresent的用法
如果给定的Optional对象非空,则Optional.isPresent()返回true。否则返回false
public static void main(String[] args) {
Optional gender = Optional.of("MALE");
Optional emptyGender = Optional.empty();
if (gender.isPresent()) {
System.out.println("Value available.");
} else {
System.out.println("Value not available.");
}
gender.ifPresent(g -> System.out.println("不会报空指针"));
//condition failed, no output print
emptyGender.ifPresent(g -> System.out.println("不会报空指针"));
}
输出
Value available.
不会报空指针
空
Optional orElse 方法
解释:如果在Optional Container中存在,则返回该值。否则返回给定的默认值。
public static void main(String[] args) {
Optional gender = Optional.of("梁思前");
Optional emptyGender = Optional.empty();
System.out.println(gender.orElse("")); //梁思前
System.out.println(emptyGender.orElse("")); //
System.out.println(gender.orElseGet(() -> "")); //梁思前
System.out.println(emptyGender.orElseGet(() -> "")); //
}
输出
梁思前
梁思前
其实看到这里大家应该看懂了吧, 其实就是一个if else的逻辑, 这样看起来更清爽,而且会提示你让你强制判断空指针的问题,从而告别空指针.
欢迎留言讨论
java十五章_Java8 教程第十五章之Optional 用法相关推荐
- java udp nio_Java NIO系列教程(十) Java NIO DatagramChannel
原文链接 作者:Jakob Jenkov 译者:郑玉婷 校对:丁一 Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以 ...
- python第七章_python教程(第七章)
字典和集合 字典是python中唯一,一个映射类型 如何创建一个字典,如下>>> dict = {"渗透":"网络安全","笔记&q ...
- Java NIO系列教程(十 五)Java NIO Path
转载自 Java NIO系列教程(十 五)Java NIO Path 译文链接 译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...
- 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...
- Java NIO系列教程(十二) Java NIO与IO
原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 当学习了Java ...
- 推荐系统系列教程之十五:一网打尽协同过滤、矩阵分解和线性模型
编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了十四期,今天按约推出第十五期:一网打尽协同过滤.矩阵分解和线性模型.希望朋友们多点"在看",多多转发,我 ...
- SAP UI5 应用开发教程之八十五 - 如何用 OPA5 编写测试用例来测试用户输入文本的功能试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...
- 我的世界Bukkit服务器插件开发教程(十五)世界生成器
十五.世界生成器 如果你仔细观察,会发现有个叫saves的文件夹,这个文件夹是用来存放存档的,即我们平常说的世界. 显然,服务器承担了创建世界.加载世界的任务.Bukkit 中也有专门生成世界的生成器 ...
- 【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16922703 作者:毛星 ...
最新文章
- 《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一1.5 VDC
- JS 全局变量、局部变量(与其他语言不太一样)
- 打破双亲委派么,怎么打破_打破它。 然后告诉我们您是如何打破它的。
- redux-saga使用
- 源码分析--SDWebImage
- 《WEB全栈工程师的自我修养》--索引笔记
- 计算机上缺少vsix安装程序,VSIX安装程序在Visual Studio 2017年(15.3)
- C#小游戏,拼音打字练习
- 服务器系统开启telnet,Telnet怎么打开 Win7/Win8系统开启Telnet服务方法图解
- Something about 博弈~(updating...)
- #6.3四维理论的数学模式
- 图片中隐藏信息——图片隐写术
- Hive Serde
- 《重装系统后弹出对话框(无法打开这个应用(无法使用内置管理员账户打开xx,请使用其他账户登录,……))》
- 关于游戏中的数据分析
- excel 妙用选择性粘贴
- 弥散张量成像(diffusion tensor imaging,DTI)常用指标
- 【计算机组成原理】实验1: 基本逻辑单元实验
- 2019/01/07 一位前端实习生 艰辛过程 励志 实习周记(三)——第二 三周
- 一个Roguelike类型H5游戏的服务器开发——成就系统
热门文章
- 输入一个整数,输出其对应汉语读法(如10020读作一万零二十、12000读作一万二千、300读作三百、1998读作一千九百九十九)。
- npm ERR! This is probably not a problem with npm. There is likely additional 或 Uncaught SyntaxErro
- Guitar Pro教程之不认识的符号讲解
- C1认证学习二(信息单位)
- 汽车数字钥匙设计03:UWB测距原理
- CRect 详解及注意事项
- 爬取免费代理上网/组建IP代理池
- h5可以获取本机手机号码么_三网运营商数据营销移动联通电信获取网站400访客...
- jar中没有主清单属性【解决办法】
- 如何检查服务器是否存在网络问题