【java8新特性3】——Optional类

1 什么是Optional类

Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常

2 Optional类的常用方法

  1. public static Optional of(T value);//创建一个 Optional 实例,value不可为null
Optional<Employee> op = Optional.of(new Employee());
  1. public static Optional empty();//创建一个空的 Optional 实例,不包含值,不可调用get方法
Optional<Employee> op = Optional.empty();
  1. public static Optional ofNullable(T value);//若 value 不为 null,创建 Optional 实例,否则创建空实例
//原码
public static <T> Optional<T> ofNullable(T value) {
	return value == null ? empty() : of(value);
}
  1. public boolean isPresent();//判断是否包含值
Optional<Employee> op1 = Optional.ofNullable(null);
Optional<Employee> op2 = Optional.ofNullable(new Employee());
if(op1.isPresent()){
	System.out.println("op1");
}
if(op2.isPresent()){
	System.out.println("op2");
}
//只输出“op2”
  1. public T orElse(T other);//如果调用对象包含值,返回该值,否则返回other
Optional<Employee> op = Optional.ofNullable(null);
System.out.println(op.orElse(new Employee("李四", 59, 6666.66)).getName());
//输出“李四”
  1. public T orElseGet(Supplier<? extends T> other);//如果调用对象包含值,返回该值,否则返回 other 获取的值
Optional<Employee> op = Optional.ofNullable(null);
System.out.println(op.orElseGet(() -> new Employee("李四", 59, 6666.66)).getName());
//输出“李四”
  1. public< U> Optional< U> map(Function<? super T, ? extends U> mapper);//如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
Optional<Employee> op = Optional.of(new Employee("李四", 59, 6666.66));
Optional<String> str = op.map(e -> e.getName());
System.out.println(str.get());
//输出“李四”
  1. public< U> Optional< U> flatMap(Function<? super T, Optional< U>> mapper);//与 map 类似,要求返回值必须是Optional
Optional<Employee> op = Optional.of(new Employee("李四", 59, 6666.66));
Optional<String> str = op.flatMap(e -> Optional.of(e.getName()));
System.out.println(str.get());
//输出“李四”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值