static <T> Optional<T> empty()
返回空的 Optional 实例。
boolean equals(Object obj)
判断其他对象是否等于 Optional。
Optional<T> filter(Predicate<? super <T> predicate)
如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。
<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
如果值存在,返回基于Optional包含的映射方法的值,否则返回一个空的Optional
T get()
如果在这个Optional中包含这个值,返回值,否则抛出异常:NoSuchElementException
int hashCode()
返回存在值的哈希码,如果值不存在 返回 0。
void ifPresent(Consumer<? super T> consumer)
如果值存在则使用该值调用 consumer , 否则不做任何事情。
boolean isPresent()
如果值存在则方法会返回true,否则返回 false。
<U>Optional<U> map(Function<? super T,? extends U> mapper)
如果有值,则对其执行调用映射函数得到返回值。如果返回值不为 null,则创建包含映射返回值的Optional作为map方法返回值,否则返回空Optional。
static <T> Optional<T> of(T value)
返回一个指定非null值的Optional。
static <T> Optional<T> ofNullable(T value)
如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。
T orElse(T other)
如果存在该值,返回值, 否则返回 other。
T orElseGet(Supplier<? extends T> other)
如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常
String toString()
返回一个Optional的非空字符串,用来调试
demo
@Entity
@Data
@Accessors(chain = true)
public class User {
private int id;
private String name;
private int age;
private Boolean sex;
private LocalDateTime date;
}
demo1
@Test
void optional1() {
User user = null;
String s = Optional.ofNullable(user)
.map(u ->{
//user为null,这段代码不输出
System.out.println("name:" + u.getName());
return u.getName();
})
.orElse("aaa");
System.out.println(s);
}
@Test
void optional2() {
User user = new User ();
String s = Optional.ofNullable(user)
.map(u ->{
//user不为null,这段代码输出
System.out.println("name:" + u.getName());
return u.getName();
})
.orElse("aaa");
System.out.println(s);
}
//最终都返回 aaa
demo2
当user不为null时,执行某件事
@Test
void optional() {
Optional.ofNullable(user)
.ifPresent(u->{
System.out.println("aaaa");;
});
}
demo3
过滤name是zhangsan的user
@Test
void optional() {
User user = new User();
user.setName("lisi");
user.setSex(true);
User zhangsan = Optional.ofNullable(user)
.filter(u -> "zhangsan".equals(u.getName()))
.orElseGet(() -> {
User user1 = new User();
user1.setName("zhangsan");
return user1;
});
System.out.println(zhangsan);
}