欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java8-Optional

程序员文章站 2022-03-04 11:04:50
...

1.定义:

Optional是Java8提供的为了解决null安全问题的一个API。减少了我们进行判断空的程序.

2.相关的方法:

Modifier and Type Method and Description
static <T> Optional<T> empty()

返回一个空 Optional实例。

boolean equals(Object obj)

指示是否有其他对象“等于”此选项。

Optional<T> filter(Predicate<? super T> predicate)

如果一个值是存在的,而价值匹配给定谓词,返回一个 Optional描述值,否则返回一个空 Optional

<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)

如果一个值是存在的,将提供 Optional-bearing映射函数,返回结果,否则返回一个空 Optional

T get()

如果一个值是在这 Optional,返回值,否则将 NoSuchElementException

int hashCode()

返回当前值的哈希代码值,如果有的话,或0(0),如果没有价值。

void ifPresent(Consumer<? super T> consumer)

如果一个值存在,调用指定的值的指定的用户,否则什么都不做。

boolean isPresent()

返回 true如果有存在价值,否则 false

<U> Optional<U> map(Function<? super T,? extends U> mapper)

如果一个值是存在的,申请提供的映射函数,如果结果不为空,返回一个 Optional描述结果。

static <T> Optional<T> of(T value)

返回与指定非空值的 Optional目前。

static <T> Optional<T> ofNullable(T value)

返回一个 Optional描述指定的值,如果非零,则返回一个空 Optional

T orElse(T other)

如果目前的返回值,否则返回 other

T orElseGet(Supplier<? extends T> other)

如果目前的返回值,否则调用 other并返回调用结果的。

<X extends Throwable>
T
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

 

相关标签: java Optional