1.定义:
Optional是Java8提供的为了解决null安全问题的一个API。减少了我们进行判断空的程序.
2.相关的方法:
Modifier and Type | Method and Description |
---|---|
static <T> Optional<T> | empty() 返回一个空 |
boolean | equals(Object obj) 指示是否有其他对象“等于”此选项。 |
Optional<T> | filter(Predicate<? super T> predicate) 如果一个值是存在的,而价值匹配给定谓词,返回一个 |
<U> Optional<U> | flatMap(Function<? super T,Optional<U>> mapper) 如果一个值是存在的,将提供 |
T | get() 如果一个值是在这 |
int | hashCode() 返回当前值的哈希代码值,如果有的话,或0(0),如果没有价值。 |
void | ifPresent(Consumer<? super T> consumer) 如果一个值存在,调用指定的值的指定的用户,否则什么都不做。 |
boolean | isPresent() 返回 |
<U> Optional<U> | map(Function<? super T,? extends U> mapper) 如果一个值是存在的,申请提供的映射函数,如果结果不为空,返回一个 |
static <T> Optional<T> | of(T value) 返回与指定非空值的 |
static <T> Optional<T> | ofNullable(T value) 返回一个 |
T | orElse(T other) 如果目前的返回值,否则返回 |
T | orElseGet(Supplier<? extends T> other) 如果目前的返回值,否则调用 |
<X extends Throwable> | orElseThrow(Supplier<? extends X> exceptionSupplier) 返回所包含的值,如果存在的话,否则抛出一个由提供的供应商创建的异常。 |
String | toString() 返回此可选适用于调试的非空字符串表示形式。 |
3.相关的案例
3.1创建一个空的Optional.
//1.创建空的optional
Optionaloptional=Optional.empty();
//Optional.empty
System.out.println("1.创建空的optional:\n"+optional.get());
//使用get方法进行输出为NoSuchElementException
3.2使用Optional的of() 方法
先创建一个对象类Optiona_User.java
importlombok.AllArgsConstructor;
importlombok.Data;
@Data
@AllArgsConstructor
publicclassOptional_User{
privateintuid;
privateStringname;
privateintage;
}
测试调用及结果
demo02(user);//正常输出user
demo02(null);//NullPointerException
3.3使用Optional的ofNullable()方法进行测试
public static void demo03(Optional_User user){
Optional<Optional_User> userB = Optional.ofNullable(user);
System.out.println("3.使用optional.ofNullable()->:\n"+userB.get());
}
测试调用及结果
public static void demo03(Optional_User user){
Optional<Optional_User> userB = Optional.ofNullable(user);
System.out.println("3.使用optional.ofNullable()->:\n"+userB.get());
}
3.4 使用ifPresent()检查是否含有值
public static void demo04(Optional_User user) {
Optional<Optional_User> userC = Optional.ofNullable(user);
System.out.println(userC.isPresent());
}
测试结果:
//4.demo04 是判断是否为空
demo04(user);//true
demo04(null);//false
3.5使用OrElse(other) 进行替换空值,使用orElseGet(()->other)效果一样
public static void demo05(Optional_User user) {
Optional_User user2 = new Optional_User(1,"superl2",22);
Optional_User userD = Optional.ofNullable(user).orElse(user2);
System.out.println("5.1使用orElse(other)->:\n"+userD);
//相当于
Optional_User userD_1 = Optional.ofNullable(user).orElseGet(() -> user2);
System.out.println("5.2 相当于使用orElseGet(()-> other)->:\n"+userD_1);
}
测试结果:
//5.demo05 使用orElse()的方法进行替换null值
demo05(user);//打印出user
demo05(null);//打印user2