(八)jdk8学习心得之Optional类
八、Optional 类
1、 作用:可以存放空指针null,主要用于解决空指针问题。
2、 使用方法
1) 创建对象(2种方法)
Optional optional = Optional.of(非null对象);
或者
Optional optional = Optional.ofNullable(任何对象);
2) 判断对象是否为null(1种方法)
Optional对象.isPresent();
3) 获取对(3种方法)
Optional对象.get();
Optional对象.orElse()
Optional对象.orElseGet();
例子:
package com.lennar.jdk8learn.learn; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test; import java.util.Optional;
import java.util.function.BiFunction; public class LearnOptional {
@Test
public void test() {
//1.创建
try {
Optional<Teacher> optional1 = Optional.of(null);//如果是null,则报空指针异常的错误
} catch (Exception e) {
System.out.println("optional1报错:" + e.toString());
}
try {
Optional<Teacher> optional2 = Optional.ofNullable(null);//允许存放null,不会报空指针的错误
} catch (Exception e) {
System.out.println("optional1报错:" + e.toString());
}
//2.空指针判断
Optional<Teacher> optional3 = Optional.ofNullable(null);
if (!optional3.isPresent()) {//null时返回false,非null时返回true
System.out.println("这个是null");
}
Optional<String> optional4 = Optional.ofNullable(new String(""));
if (!optional4.isPresent()) {//null时返回false,非null时返回true
System.out.println("这个是null");
} else {
System.out.println("这个不是null");
}
//3.获取Optional中的对象
try {
Teacher t0 = optional3.get();//确定有对象时返回对象,否则报空指针异常的错
System.out.println(t0);
} catch (Exception e) {
System.out.println("optional3中没有对象,为null");
}
Optional<Teacher> optional5 = Optional.ofNullable(new Teacher("1", "张三"));
Teacher t1 = optional5.get();
System.out.println(t1); Teacher t2 = optional3.orElse(new Teacher("2", "李四"));//对象非空返回对象,否则返回默认值(类型一致,在orElse中的值就是默认值)
System.out.println(t2);
Teacher t3 = optional5.orElse(null);
System.out.println(t3); Teacher t4 = optional3.orElseGet(() -> {//对象非空返回对象,否则调用orElseGet中的方法返回同类型的默认对象
String id = "3";
String name = "王五";
BiFunction<String, String, Teacher> function = Teacher::new;
return function.apply(id, name);
});
System.out.println(t4);
Teacher t5 = optional5.orElseGet(() -> {
String id = "4";
String name = "赵六";
BiFunction<String, String, Teacher> function = Teacher::new;
return function.apply(id, name);
});
System.out.println(t5); }
} @Data
@AllArgsConstructor
@NoArgsConstructor
class Teacher {
private String id;
private String name;
}
(八)jdk8学习心得之Optional类的更多相关文章
- (六)jdk8学习心得之Stream流
六.Stream流 1. 什么是stream流 现阶段,可以把stream流看成一个高级版的Iterator.普通的Iterator只能实现遍历,遍历做什么,就需要具体些功能代码函数了.而这个stre ...
- (五)jdk8学习心得之默认方法
五.默认方法 1. 使用方法:写在接口中,就是为了接口可以做一些事情. 2. 目的:有很多实现类,有一个公共的抽象方法,其实这些实现类实现该抽象方法的内容是完全一致的,完全没有必要都重新实现一遍.并且 ...
- (二)jdk8学习心得之Lambda表达式
二.Lambda表达式 1. 格式 (参数1,参数2,…,参数n)->{方法体} 注意: (参数1,参数2,...,参数n)要与方法接口中的参数一致,但是名字可以不一样. 此外,方法类型接口,有 ...
- (一)jdk8学习心得之遍历
一.遍历 -- 最好和stream流连用 使用jdk8提供的forEach进行遍历时,采用的是多线程的操作,理论上讲是会比原来的方法更快.但是注意,系统启动时需要加载lambda框架的内容.因此如果通 ...
- (七)jdk8学习心得之join方法
七.join方法 1. 作用:将list或者数组按照连接符进行连接,返回一个字符串. 2. 使用方法 1) String.join(“连接符”,数组对象或者list对象) 2) 首先转换成stream ...
- (四)jdk8学习心得之函数式接口
四.函数式接口 1. 格式 注:抽象方法就是通过lambda表达式或者方法引用实现. 2. Jdk提供的函数式接口(这里提供五个最为常用的) 3. 技巧 通过函数式接口,就可以把一个函数作为一个参数进 ...
- (三)jdk8学习心得之方法引用
三.方法引用 https://www.jianshu.com/p/c9790ba76cee 这边博客写的很好,可以首先阅读,在这里感谢这篇文章的博主. 1. 格式 调用者::调用者具备的方法名 2. ...
- 我的MYSQL学习心得(八) 插入 更新 删除
我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...
- 我的MYSQL学习心得(八)
原文:我的MYSQL学习心得(八) 我的MYSQL学习心得(八) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...
随机推荐
- java的spi 的简单应用
1.什么是java的spi SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制. 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一 ...
- NTP服务和DNS服务(week3_day3)--技术流ken
NTP时间服务器 作用:ntp主要是用于对计算机的时间同步管理操作. 时间是对服务器来说是很重要的,一般很多网站都需要读取服务器时间来记录相关信息,如果时间不准,则可能造成很大的影响. 部署安装NTP ...
- Eureka配置instanceId显示IP
直接配置: eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-add ...
- [MySQL] MVCC 多版本并发控制实现的事务
1.没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行2.通过保存数据在某个时间点的快照实现的3.典型的有乐观并发控制和悲观并发控制4.innodb的mvcc是每次事务都有递增的版本 ...
- throw和throws的区别以及try,catch,finally在有return的情况下执行的顺序
一,抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常.下面它们之间的异同. (1).系统自动抛异常 1.当程序语句出现一些逻辑错误.主义错误或类型转换错误时,系统会自动抛出 ...
- 命令行操作mysql 未完待续......
复制数据表 create table 新表 like 旧表: 删除表中某个字段 alter table 表名 drop column 字段; 例子: alter table news_apply_lo ...
- vue路由懒加载 及import
- cesium 之三维漫游飞行效果实现篇(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- nlp中文分词(jieba和pyltp)
分词是中文自然语言处理的基础.目前常用的分词算法有 1.张华平博士的NShort中文分词算法. 2.基于条件随机场(CRF)的中文分词算法. 这两种算法的代表工具包分别是jieba分词系统和哈工大的L ...
- 工具资源系列之给虚拟机装个centos
前文我们已经讲解了如何在 mac 系统上安装虚拟机软件,这节我们接着讲解如何利用虚拟机安装 centos 镜像. 安装镜像的大致步骤基本相同,只不过是配置项略显不同而已,如果需要安装其他系统镜像,请参 ...