个人网站:http://xiaocaoshare.com/
要求:jdk1.8以上
Optional类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象
常用方法:
1.of方法
为非null的值创建一个Optional,如果值为空则抛出一个空指针异常
public staticOptional of(T value) { return new Optional<>(value); }
private Optional(T value) { this.value = Objects.requireNonNull(value); }
public staticT requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; }
2.ofNullable方法
为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional
public staticOptional ofNullable(T value) { return value == null ? empty() : of(value); }
3.isPresent方法
如果值存在返回true,否则返回false。
public boolean isPresent() { return value != null; }
4.get方法
如果Optional有值则将其返回,否则抛出NoSuchElementException。
public T get() { if (value == null) { throw new NoSuchElementException("No value present"); } return value; }
5.ifPresent
如果Optional实例有值则为其调用consumer,否则不做处理
public void ifPresent(Consumer super T> consumer) { if (value != null) consumer.accept(value); }
6.orElse
如果有值则将其返回,否则返回指定的其它值。
public T orElse(T other) { return value != null ? value : other; }
7.orElseGet
orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值
public T orElseGet(Supplier extends T> other) { return value != null ? value : other.get(); }
8.orElseThrow
如果有值则将其返回,否则抛出supplier接口创建的异常。
在orElseGet方法中,我们传入一个Supplier接口。然而,在orElseThrow中我们可以传入一个lambda表达式或方法,如果值不存在来抛出异常。
public T orElseThrow(Supplier extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
9.map
如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
map方法用来对Optional实例的值执行一系列操作。通过一组实现了Function接口的lambda表达式传入操作。
public Optional map(Function super T, ? extends U> mapper) { Objects.requireNonNull(mapper); if (!isPresent()) return empty(); else { return Optional.ofNullable(mapper.apply(value)); } }
10.flatMap
如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。
flatMap方法与map方法类似,区别在于mapping函数的返回值不同。map方法的mapping函数返回值可以是任何类型T,而flatMap方法的mapping函数必须是Optional
public Optional flatMap(Function super T, Optional> mapper) { Objects.requireNonNull(mapper); if (!isPresent()) return empty(); else { return Objects.requireNonNull(mapper.apply(value)); } }
11.filter
如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional
public Optional filter(Predicate super T> predicate) {
Objects.requireNonNull(predicate);
if (!isPresent())
return this;
else
return predicate.test(value) ? this : empty();
}
常用写法:
1.
Coupon coupon = couponService.getCoupon(id); Optional.ofNullable(coupon) .filter(o -> o.getValid()) .filter(o -> programToken.equals(o.getProgramToken())) .orElseThrow(() -> new MiniException(ErrCode.COUPON_NOT_EXISTS.getName()));
根据Id查询对象,判断对象是否存在(valid为1表示数据有效,0表示已删除,token代表某个商家)