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的非空字符串,用来调试
@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); }