Java8 Optional类
概述
到目前为止,著名的NullPointerException是导致Java应用程序失败的最常见原因。过去,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。
Optional 被定义为一个简单的容器,其值可能是null或者不是null。在Java 8之前一般某个函数应该返回非空对象但是偶尔却可能返回了null,而在Java 8 以后,不推荐你返回null而是返回Optional。
方法
Optional类主要有以下方法:
- empty(): 返回空的 Optional 实例。
- equals(Object obj): 判断其他对象是否等于 Optional。
- filter(function): 如果值存在,并且这个值经过方法返回true,返回一个Optional用以描述这个值,否则返回一个空的Optional。
- flatMap(function): 如果值存在,返回经过函数加工的Optional类,否则返回一个空的Optional
- get(): 如果在这个Optional中包含这个值,返回值,否则抛出异常:NoSuchElementException
- hashCode(): 返回存在值的哈希码,如果值不存在 返回 0。
- ifPresent(function): 如果值存在则使用该值调用 consumer , 否则不做任何事情。
- isPresent(): 如果值存在则方法会返回true,否则返回 false。
- map(function): 如果有值,则对其执行调用映射函数得到返回值。如果返回值不为 null,则创建包含映射返回值的Optional作为map方法返回值,否则返回空Optional。
- static of(value): 返回一个指定非null值的Optional。
- static ofNullable(value): 如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。
- orElse(other): 如果存在该值,返回值, 否则返回 other。
- orElseGet(function): 如果存在该值,返回值, 否则触发 方法,并返回方法调用的结果。
- orElseThrow(function): 如果存在该值,返回包含的值,否则抛出方法指定的异常
- toString(): 返回一个Optional的非空字符串
其中的方法都可以使用lambda表达式的
Java8 Optional类相关推荐
- Java8 Optional类用法
文章目录 API介绍 第一组 Optional(T value) empty() of(T value) ofNullable(T value) 第二组 orElse(T other),orElseG ...
- 新容器!不再担心空指针, Java8 Optional类
Optional<T>类(java.util.Optional)是一个容器类,它可以保存类型T的值,代表这个值存在.或者仅仅保存null,表示这个值不存在.原来用 null 表示一个值不存 ...
- Java8新特性Optional类
这里写自定义目录标题 Java8 Optional 类 前言 创建 Optional 实例 Optional API常用接口的用法 get()方法 isPresent()方法 isPresent()方 ...
- Java8新特性 Optional类
作为开发人员每天与NullPointerException斗智斗勇.每接收到参数或调用方法获得值得判断一下是否为null.稍不留意,空指针异常就像幽灵一样出现了.这篇文章我们来学习Java8是如何通过 ...
- 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类
1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...
- java8新特性(5)— Optional 类
java8新特性(5)- Optional 类 空指针解决方案 package com.common.jdk8;import java.util.Optional;//Optional 类是一个可以为 ...
- Java8新特性总结 - 2.Optional类
所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...
- Java8新特性学习_001_(Lambda表达式,函数式接口,方法引用,Stream类,Optional类)
目录 ■代码 ■代码运行结果 ■代码说明 ・44行:Stream的.foreach方法ー参数类型:函数式接口 ・82行:Interface中,default方法 ・92行 Stream的.max方 ...
- Java8新特性之空指针异常的克星Optional类
Java8新特性系列我们已经介绍了Stream.Lambda表达式.DateTime日期时间处理,最后以"NullPointerException" 的克星Optional类的讲解 ...
最新文章
- 2018-3-12论文(非结构网络中有价值信息数据挖掘)笔记二-----作者:关联规则的非结构网络有价值信息数据挖掘(看不懂,看不懂)
- python 全景图像拼接( python3.6 + opencv3.4.2.16) 融合
- 分享 - Social.framework
- android view父级隐藏,Android指定的子级已经有父级。必须先对子级的父级调用removeView()...
- 深度学习实战 | 使用Kera预测人物年龄
- Hbase协处理器实践总结(hbase数据同步)
- Bruce的程序员语录
- 【18】Python半成品购物车
- SpringCloud——消息驱动
- 简单一招就能进行不同平台的推文转移,复制粘贴。
- mt6577驱动开发 笔记版
- EndNote修改导入文献格式的方法
- SRAM随机存储器的特点及结构
- nexus安装与使用
- HTML5历史状态管理history API-pushState/replaceState与popstate事件
- html5中的meter标签改变颜色规则
- 互联网产品都是怎么做推广的?(app产品推广)
- db2 10.1 数据库文件介绍
- 洛谷 P4269 / loj 2041 [SHOI2015] 聚变反应炉 题解【贪心】【DP】
- 4k影视文件存储服务器方案,存储系统4K网络存阵列服务器储
热门文章
- 计算机专业网站的开题ppt,.计算机专业开题报告.ppt
- android 组件路由框架,XRouter:组件化路由框架
- Java学习路线,你值得了解
- 10个简单的 Java 性能调优技巧
- 谈一谈Java编程开发中虚拟机的内存区域划分?猿们怎么看?
- php 执行mysql查询_php中执行mysql的常用操作
- js 正则 长度不超过50_如何花不超过50元人民币,拍抖音网红海马体照片?
- css 查看更多_在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)...
- iis7 php5 isapi配置,Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程
- 基于matlab的fisher线性判别及感知器判别_基于嵌入表示的网络实体对齐方法进展概述...