Optional 类

  • Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
  • Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
  • Optional 类的引入很好的解决空指针异常。


方法

1 Optional.of(T t) 创建实例
2 Optional.empty() 创建一个空的Optional实例
3 Optional.ofNullable(T t) 若t不为null,创建Optional实例,否则创建空实例
4 isPresent() 判断是否包含值
5 orElse(T t) 如果调用对象包含值,返回该值,否则返回t
6 orElseGet(Supplier s) 如果调用对象包含该值,返回该值,否则返回s获取的值
7 map(Function f) 如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
8 flatMap(Function mapper) 与map类似,要去返回值必须是Optional


示例

package java8.Optional;

import java.util.Optional;

import java8.Lambda.Emp;

public class TestOptional {

/*
* Optional.of(T t):创建实例
* Optional.empty():创建一个空的Optional实例
* Optional.ofNullable(T t):若t不为null,创建Optional实例,否则创建空实例
* isPresent():判断是否包含值
* orElse(T t):如果调用对象包含值,返回该值,否则返回t
* orElseGet(Supplier s):如果调用对象包含该值,返回该值,否则返回s获取的值
* map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
* flatMap(Function mapper):与map类似,要去返回值必须是Optional
*/
public static void main(String[] args) {
Optional<Emp> op = Optional.of(new Emp());
System.out.println(op.get());

Optional<Emp> op1 = Optional.empty();
System.out.println(op1.get());

Optional<Emp> op2 = Optional.ofNullable(new Emp());
System.out.println(op2.get());

Optional<Emp> op3 = Optional.ofNullable(null);
if (op3.isPresent()) {
System.out.println(op3.get());
}

Emp emp = op3.orElse(new Emp("ss", 16, 2000, Emp.Status.FREE));
System.out.println(emp);

Emp emp1 = op3.orElseGet(() -> new Emp());
System.out.println(emp1);

//map
Optional<Emp> op4 = Optional.ofNullable(new Emp("ss", 16, 2000, Emp.Status.FREE));
Optional<String> str = op4.map((e) -> e.getName());
System.out.println(str.get());

//flatMap
Optional<String> str2 = op4.flatMap((e) -> Optional.of(e.getName()));
System.out.println(str2.get());
}
}





回到顶部