Java8新特性之Optional类(三)
程序员文章站
2022-06-07 13:12:14
...
简介
-
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
-
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
-
Optional 类的引入很好的解决空指针异常。
常用API
- static Optional of(T value) 创建一个 Optional 实例
@Test
public void test1(){
// 创建一个 Optional 实例
Optional<User> optionalUser = Optional.of(new User());
System.out.println(optionalUser.get());
}
- static Optional empty() 返回空的 Optional 实例。
@Test
public void test2(){
// 创建一个空的 Optional 实例
// (可以更精准的定位空指针位置)
Optional<User> optionalUser = Optional.empty();
System.out.println(optionalUser.get());
}
- static Optional ofNullable(T value) 如果不为空,返回 Optional 描述的指定值,否则返回空的 Optional。
@Test
public void test3(){
// 如果不为空,返回 Optional 描述的指定值,否则返回空的 Optional。
// (可以更精准的定位空指针位置)
Optional<User> optionalUser = Optional.ofNullable(new User());
System.out.println(optionalUser.get());
Optional<User> optionalUser2 = Optional.ofNullable(null);
System.out.println(optionalUser2.get());
}
- boolean isPresent() 如果值存在则方法会返回true,否则返回 false。
@Test
public void test4(){
// isPresent()如果值存在则方法会返回true,否则返回 false。
Optional<User> optionalUser = Optional.ofNullable(new User());
if(optionalUser.isPresent()){
System.out.println(optionalUser.get());
}else{
System.out.println("OptionalUser中无值");
}
}
- T orElse(T other) 如果存在该值,返回值, 否则返回 other。
@Test
public void test5(){
// T orElse(T other) 如果存在该值,返回值, 否则返回 other。
Optional<User> optionalUser1 = Optional.ofNullable(new User("zyn",20));
User user1 = optionalUser1.orElse(new User("xyn", 20));
System.out.println(user1);
Optional<User> optionalUser2 = Optional.ofNullable(null);
User user2 = optionalUser2.orElse(new User("zyn", 20));
System.out.println(user2);
}
- T orElseGet(Supplier<? extends T> other) 如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。
@Test
public void test6(){
// T orElseGet(Supplier<? extends T> other)
// 如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。
Optional<User> optionalUser1 = Optional.ofNullable(new User("zyn",20));
User user1 = optionalUser1.orElseGet(() -> new User("xyn",20));
System.out.println(user1);
Optional<User> optionalUser2 = Optional.ofNullable(null);
User user2 = optionalUser2.orElse(new User("xyn", 20));
System.out.println(user2);
}
- Optional map(Function<? super T,? extends U> mapper) 如果有值,则对其进行处理,并返回处理后的Optional,否则返回空Optional。
@Test
public void test7(){
// <U>Optional<U> map(Function<? super T,? extends U> mapper)
// 如果有值,则对其进行处理,并返回处理后的Optional
// 否则返回空Optional。
Optional<User> optionalUser1 = Optional.ofNullable(new User("zyn",20));
Optional<String> name1 = optionalUser1.map(User::getName);
System.out.println(name1.get());
Optional<User> optionalUser2 = Optional.ofNullable(null);
Optional<String> name2 = optionalUser2.map(User::getName);
System.out.println(name2.get());
}
- Optional flatMap(Function<? super T,Optional> mapper) 与map类似,要求返回值必须是Optional
@Test
public void test8(){
// <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
// 与map类似,要求返回值必须是Optional
Optional<User> optionalUser1 = Optional.ofNullable(new User("zyn",20));
Optional<String> name1 = optionalUser1.flatMap(u -> Optional.of(u.getName()));
System.out.println(name1.get());
Optional<User> optionalUser2 = Optional.ofNullable(null);
Optional<String> name2 = optionalUser2.flatMap(u -> Optional.of(u.getName()));
System.out.println(name2.get());
}
更多api:https://www.runoob.com/java/java8-optional-class.html
推荐阅读
-
java8新特性之接口的static和default的使用
-
Java8新特性之接口中的默认方法和静态方法详解
-
乐字节-Java8新特性之Base64和重复注解与类型注解
-
Java8中新特性Optional、接口中默认方法和静态方法详解
-
Java8新特性之JavaFX 8_动力节点Java学院整理
-
Java8新特性之Base64详解_动力节点Java学院整理
-
Java8新特性之泛型的目标类型推断_动力节点Java学院整理
-
Java8新特性之StampedLock_动力节点Java学院整理
-
Java8新特性之lambda的作用_动力节点Java学院整理
-
Java8新特性之再见Permgen_动力节点Java学院整理