说明:Optional和Stream一样,是Java8引入的特性,本文介绍Optional的几个实际用法。Steam流使用,参考下面这篇文章:
- Stream流使用
使用
1.保证值存在
// 1.保证值存在,pageNumber,pageSize
Integer pageNumber = null;
Integer pageSize = null;
pageNumber = Optional.ofNullable(pageNumber).orElse(1);
pageSize = Optional.ofNullable(pageSize).orElse(10);
System.out.println("pageNumber = " + pageNumber + ", pageSize = " + pageSize);
2.保证值合法
// 2.保证值合法
Integer id = -1;
id = Optional.ofNullable(id).filter(e -> e > 0).orElse(1);
System.out.println("id = " + id);
// 或,不合法时抛出异常
id = -1;
Optional.ofNullable(id).filter(e -> e > 0).orElseThrow(() -> new IllegalArgumentException("id必须大于0"));
3.避免多次空判断
有时我们想获取一个对象中的对象的对象的值,如下:
Country country = new Country("中国", "100001");
Address address = new Address("北京", "北京市", "长安街", "北京市长安街", country);
Student student = new Student("001", "张三", "男", 18, address);
学生对象中有地址对象,地址对象中有国家对象,当我们要获取该学生的国家名称时,常规情况,我们需要这样:
// 3.获取该学生的国家名称
if (student != null) {
Address address1 = student.getAddress();
if (address1 != null) {
Country country1 = address1.getCountry();
if (country1 != null) {
String name = country1.getName();
if (name != null) {
System.out.println("name = " + name);
} else {
System.out.println("未知");
}
}
}
}
使用Optional就很方便
// 使用Optional
String name = Optional.ofNullable(student)
.map(Student::getAddress)
.map(Address::getCountry)
.map(Country::getName)
.orElse("未知");
System.out.println("name = " + name);
总结
以上三个例子,来自阿里云藏经阁电子书《Java工程师必读手册》P294~295,地址如下:
- 电子书《Java工程师必读手册》地址:https://developer.aliyun.com/ebook/7780