本套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 用法相关推荐

  1. java udp nio_Java NIO系列教程(十) Java NIO DatagramChannel

    原文链接    作者:Jakob Jenkov    译者:郑玉婷     校对:丁一 Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以 ...

  2. python第七章_python教程(第七章)

    字典和集合 字典是python中唯一,一个映射类型 如何创建一个字典,如下>>> dict = {"渗透":"网络安全","笔记&q ...

  3. Java NIO系列教程(十 五)Java NIO Path

    转载自  Java NIO系列教程(十 五)Java NIO Path 译文链接  译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...

  4. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  5. Java NIO系列教程(十二) Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  6. 推荐系统系列教程之十五:一网打尽协同过滤、矩阵分解和线性模型

    编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了十四期,今天按约推出第十五期:一网打尽协同过滤.矩阵分解和线性模型.希望朋友们多点"在看",多多转发,我 ...

  7. SAP UI5 应用开发教程之八十五 - 如何用 OPA5 编写测试用例来测试用户输入文本的功能试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...

  8. 我的世界Bukkit服务器插件开发教程(十五)世界生成器

    十五.世界生成器 如果你仔细观察,会发现有个叫saves的文件夹,这个文件夹是用来存放存档的,即我们平常说的世界. 显然,服务器承担了创建世界.加载世界的任务.Bukkit 中也有专门生成世界的生成器 ...

  9. 【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16922703 作者:毛星 ...

最新文章

  1. 《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一1.5 VDC
  2. JS 全局变量、局部变量(与其他语言不太一样)
  3. 打破双亲委派么,怎么打破_打破它。 然后告诉我们您是如何打破它的。
  4. redux-saga使用
  5. 源码分析--SDWebImage
  6. 《WEB全栈工程师的自我修养》--索引笔记
  7. 计算机上缺少vsix安装程序,VSIX安装程序在Visual Studio 2017年(15.3)
  8. C#小游戏,拼音打字练习
  9. 服务器系统开启telnet,Telnet怎么打开 Win7/Win8系统开启Telnet服务方法图解
  10. Something about 博弈~(updating...)
  11. #6.3四维理论的数学模式
  12. 图片中隐藏信息——图片隐写术
  13. Hive Serde
  14. 《重装系统后弹出对话框(无法打开这个应用(无法使用内置管理员账户打开xx,请使用其他账户登录,……))》
  15. 关于游戏中的数据分析
  16. excel 妙用选择性粘贴
  17. 弥散张量成像(diffusion tensor imaging,DTI)常用指标
  18. 【计算机组成原理】实验1: 基本逻辑单元实验
  19. 2019/01/07 一位前端实习生 艰辛过程 励志 实习周记(三)——第二 三周
  20. 一个Roguelike类型H5游戏的服务器开发——成就系统

热门文章

  1. 输入一个整数,输出其对应汉语读法(如10020读作一万零二十、12000读作一万二千、300读作三百、1998读作一千九百九十九)。
  2. npm ERR! This is probably not a problem with npm. There is likely additional 或 Uncaught SyntaxErro
  3. Guitar Pro教程之不认识的符号讲解
  4. C1认证学习二(信息单位)
  5. 汽车数字钥匙设计03:UWB测距原理
  6. CRect 详解及注意事项
  7. 爬取免费代理上网/组建IP代理池
  8. h5可以获取本机手机号码么_三网运营商数据营销移动联通电信获取网站400访客...
  9. jar中没有主清单属性【解决办法】
  10. 如何检查服务器是否存在网络问题