Optional类
Optional类(java. util. Optional)是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。
常用方法:
Optional.of (T t) :创建一个Optional实例
Optional. empty() :创建一个空的Optional实例
Optional. ofNullable(T t):若t不为nul1,创建Optional实例,否则创建空实例
isPresent () :判断是否包含值
orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
orElseGet (Supplier s) :如果调用对象包含值,返回该值,否则返回s获取的值
map (Function f):如果有值对其处理,并返回处理后的0ptional,否则返回Optional. empty()
flatMap(Function mapper) :与map类似,要求返回值必须是Optional
Optional.of (T t) :创建一个Optional实例
@Test
public void test1() {
Optional optional = Optional.of(new Employee());
Employee employee = optional.get();
System.out.println(employee);//Employee{name='null', age=0, salary=0, status='null'}
}
Optional. empty() :创建一个空的Optional实例
@Test
public void test2() {
Optional optional = Optional.empty();//创建一个空的Optional实例
Employee employee = optional.get();//java.util.NoSuchElementException: No value present
System.out.println(employee);
}
Optional. ofNullable(T t):若t不为nul1,创建Optional实例,否则创建空实例
@Test
public void test3() {
Optional optional = Optional.ofNullable(new Employee());
Employee employee = optional.get();
System.out.println(employee);//Employee{name='null', age=0, salary=0, status='null'}
Optional optional2 = Optional.ofNullable(null);
Employee employee2 = optional2.get();//java.util.NoSuchElementException: No value present
System.out.println(employee2);
}
public static Optional ofNullable(T value) {
return value == null ? empty() : of(value);
}
isPresent () :判断是否包含值orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
@Test
public void test3() {
Optional optional = Optional.ofNullable(new Employee());
if (optional.isPresent()) {
Employee employee = optional.get();
System.out.println(employee);//Employee{name='null', age=0, salary=0, status='null'}
}
Optional optional2 = Optional.ofNullable(null);
if (optional2.isPresent()) {//没有值跳过
Employee employee2 = optional2.get();
System.out.println(employee2);
}
}
orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
@Test
public void test3() {
Optional optional = Optional.ofNullable(new Employee());
Employee employee = optional.orElse(new Employee("张三", 18, 3000, Status.BUSY));
System.out.println(employee);//Employee{name='null', age=0, salary=0, status='null'}
Optional optional2 = Optional.ofNullable(null);
Employee employee2 = optional2.orElse(new Employee("张三", 18, 3000, Status.BUSY));
System.out.println(employee2);//Employee{name='张三', age=18, salary=3000, status='BUSY'}
}
orElseGet (Supplier s) :如果调用对象包含值,返回该值,否则返回s获取的值
@Test
public void test3() {
Optional optional = Optional.ofNullable(new Employee());
Employee employee = optional.orElseGet(()->new Employee("张三", 18, 3000, Status.BUSY));
System.out.println(employee);//Employee{name='null', age=0, salary=0, status='null'}
Optional optional2 = Optional.ofNullable(null);
Employee employee2 = optional2.orElseGet(()->new Employee("张三", 18, 3000, Status.BUSY));
System.out.println(employee2);//Employee{name='张三', age=18, salary=3000, status='BUSY'}
}
map (Function f):如果有值对其处理,并返回处理后的0ptional,否则返回Optional. empty()
@Test
public void test4() {
Optional optional = Optional.ofNullable(new Employee("张三", 18, 3000, Status.BUSY));
Optional optionalS = optional.map((x) -> x.getName());
System.out.println(optionalS .get());//张三
}
flatMap(Function mapper) :与map类似,要求返回值必须是Optional
@Test
public void test4() {
Optional optional = Optional.ofNullable(new Employee("张三", 18, 3000, Status.BUSY));
Optional optional1 = optional.flatMap((x) -> optional.of(x.getName()));
System.out.println(optional1.get());//张三
}