Optional接口简记
@Data
public class Employee {
private String name;
}
@Data
public class Company {
private String name;
private List<Employee> employees;
}
/**
* optional接口, optional的使用都是基于函数式的用法, 不写if-else判断
* optional 无法序列化, 不要将她作为方法参数 或 类的成员变量, 只用在方法的返回值上,
* 用来规避空指针异常
*/
public class OptionalTest {
@Test
public void test() {
Optional<String> optional = Optional.of("hello");
// 无用的使用方式
if (optional.isPresent()) {
System.out.println(optional.get());
}
// 推荐的使用方式
optional.ifPresent(item -> System.out.println(item));
}
@Test
public void test2() {
Optional<String> optional = Optional.empty();
// 推荐的使用方式, 没有值将不执行传入的方法
optional.ifPresent(item -> System.out.println(item));
System.out.println("---------------------------------");
System.out.println(optional.orElse("world"));
System.out.println("---------------------------------");
System.out.println(optional.orElseGet(() -> "nihao"));
System.out.println("---------------------------------");
}
@Test
public void Test3() {
Employee employee = new Employee();
employee.setName("zhangsan");
Employee employee2 = new Employee();
employee2.setName("lisi");
Company company = new Company();
company.setName("company");
List<Employee> employees = Arrays.asList(employee, employee2);
company.setEmployees(employees);
List<Employee> list = company.getEmployees();
// 传统手工艺做法:
/*
if (null != list) {
return list;
} else {
return new ArrayList<Employee>();
}
*/
// 崭新的函数式风格
Optional<Company> optional = Optional.ofNullable(company);
System.out.println(
optional.map(c -> c.getEmployees()).orElse(Collections.emptyList())
);
}
}
Optional接口简记的更多相关文章
- 【Guava】Optional接口来避免空指针错误
null会带来很多问题,从开始有null开始有无数程序栽在null的手里,null的含义是不清晰的,检查null在大多数情况下是不得不做的,而我们又在很多时候忘记了对null做检查,在我们的产品真正投 ...
- Java 8中一些常用的全新的函数式接口
这一篇属于菜鸟级博客,只是介绍了一些在Java 8中新出现的一些很有用的接口,通过一些简单的例子加以说明,没有深入地阐述. 函数式接口 什么是函数式接口? 函数式接口,@FunctionalInter ...
- c++11实现c++14的optional
c++14中将包含一个std::optional类,它的功能和用法和boost的optional类似.optional<T>内部存储空间可能存储了T类型的值也可能没有存储T类型的值,只有当 ...
- Java8新特性:Function接口和Lambda表达式参考
Lambda基本:https://blog.csdn.net/wargon/article/details/80656575 https://www.cnblogs.com/hyyq/p/742566 ...
- Java学习:常用函数接口
常用函数接口 什么是函数式接口? 函数式接口,@FunctionalInterface,简称FI,简单的说,FI就是指仅含有一个抽象方法的接口,以@Functionalnterface标注 注意:这里 ...
- Java 8 访问接口的默认方法
Java 8 API提供了很多全新的函数式接口来让工作更加方便,有一些接口是来自Google Guava库里的,即便你对这些很熟悉了,还是有必要看看这些是如何扩展到lambda上使用的. 一.Opti ...
- 聊一聊Java8 Optional,让你的代码更加优雅
码农在囧途 随着时间的推移,曾经我们觉得重要的东西,可能在今天看来是如此的浅薄和无知,同理,今天我们放不下,想不开,觉得重要的东西,多年后我们可能也会觉得也就那样,所以,今天的的所有烦恼,忧愁,想不开 ...
- JDK7和JDK8一些重要新特性
jdk7新特性(部分) switch支持字符串 List AutoCloseable接口实现自动关闭,在try()中 新增获取环境信息的工具方法,getJavaHomeDir,getUserHomeD ...
- JDK各个版本的新特性jdk1.5-jdk8
JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一 ...
随机推荐
- 我的docker笔记
下面的链接全部是我在CSDN的关于docker的博文,我认为已经很是详细了,没有再次总结的必要性,特给出链接地址 docker容器技术基础 https://blog.csdn.net/zisefeiz ...
- Ubuntu 16.04修改ssh端口
1 安装防火墙 sudo apt-get install ufw启用 sudo ufw enable sudo ufw default deny 作用:开启了防火墙并随系统启动同时关闭所有外部对本机的 ...
- HBuilder使用逍遥Android模拟器
Microvirt HBuilder使用逍遥Android模拟器 1.逍遥模拟器安装 地址: 点我下载 2.连接注意事项 a. 复制adb等文件 HBuilder安装目录中tools文件夹下的三个文件 ...
- Python For Mac 开发环境安装 以及问题记录
Python For Mac 开发环境安装记录 把自己安装的过程记录一下,亲测可用 1.Python3环境安装(转载http://www.cnblogs.com/meng1314-shuai/p/90 ...
- rtmpdump禁用openssl
rtmpdump禁用openssl 主要是编译方便 很多地方根本不需要用openssl 先找到librtmp/rtmp_sys.h 然后加入宏#define NO_CRYPTO在#ifdef _WIN ...
- linux交叉编译Windows版本的ffmpeg
主要参考http://www.cnblogs.com/haibindev/archive/2011/12/01/2270126.html 在我的机器上编译libfaac的时候 出现问题了 输出如下 . ...
- Jmeter 设置连接oracle数据库
一.添加需要数据库驱动jar包 方式1:直接将jar包复制到jmeter的lib目录,或lib/ext目录:(亲测两个目录都可以使用) 方式2:使用jmeter的Test Plan引入相应的jar包: ...
- ubuntu 安汉google浏览器
在终端中,输入以下命令: sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ ...
- DeepFaceLab报错,integer division or modulo by zero
DeepFaceLab的集成环境在众多换脸软件中是做的最好的.但是使用过程也会出现一些错误,主要的错误有两个,一个是你配置太低OOM了,主要体现显存太低.第二个是版本不对应.比如你原先用的cuda9. ...
- JAVA中对null进行强制类型转换(null可以强转为任意对象,并执行对象的静态方法)
今天很好奇,对null进行强转会不会抛错.做了如下测试得到的结果是, 如果把null强转给对象,是不会抛异常的,本身对象是可以为null的. 但是如果是基本类型,比如 int i = (Integer ...