📜  流可选对象 (1)

📅  最后修改于: 2023-12-03 15:11:05.397000             🧑  作者: Mango

流可选对象

流可选对象即Optional类型,是Java 8版本引入的一个特性,它对于解决Java代码中可能出现的空指针异常有着很好的作用。

Optional的作用

Optional可以用来描述一个值存在或不存在,从而避免了空指针异常的发生。通过Optional类型的变量,我们可以方便地判断一个对象是否为空。

Optional的创建与使用

我们可以使用Optional.empty()方法来创建一个空的Optional对象,也可以使用Optional.of()方法来创建一个非空的Optional对象,其内部存储的对象不可为空。还可以使用Optional.ofNullable()方法来创建一个可能为空的Optional对象。

Optional<String> emptyOptional = Optional.empty();
Optional<String> notNullOptional = Optional.of("not null");
Optional<String> nullableOptional = Optional.ofNullable(null);

可以使用isPresent()方法来检查Optional对象中是否有值,如果有,则返回true;否则返回false。

Optional<String> stringOptional = Optional.of("not null");
if (stringOptional.isPresent()) {
    System.out.println(stringOptional.get()); // 输出:not null
}

可以使用orElse()方法来获取Optional对象中存储的值,如果值不存在,则返回orElse()方法中传入的参数。

Optional<String> emptyOptional = Optional.empty();
String result = emptyOptional.orElse("default");
System.out.println(result); // 输出:default
Optional的其他方法

Optional还提供了一些其他方法来方便地操作Optional对象,如map()方法、filter()方法、orElseThrow()方法等等。

可以使用map()方法来对Optional对象中存储的值进行操作,并将操作结果封装成一个新的Optional对象返回。

Optional<String> stringOptional = Optional.of("not null");
Optional<Integer> lengthOptional = stringOptional.map(String::length);
System.out.println(lengthOptional.get()); // 输出:7

可以使用filter()方法来对Optional对象中存储的值进行条件判断,如果符合条件则返回当前Optional对象,否则返回一个空的Optional对象。

Optional<String> stringOptional = Optional.of("not null");
Optional<String> filteredOptional = stringOptional.filter(s -> s.startsWith("n"));
System.out.println(filteredOptional.get()); // 输出:not null

可以使用orElseThrow()方法来获取Optional对象中存储的值,如果值不存在,则抛出一个指定的异常。

Optional<String> emptyOptional = Optional.empty();
String result = emptyOptional.orElseThrow(IllegalArgumentException::new);
总结

Optional类型是Java 8版本引入的一个特性,它对于解决Java代码中可能出现的空指针异常有着很好的作用。我们可以使用它来描述一个值存在或不存在,可以方便地判断一个对象是否为空。同时,Optional还提供了一些其他方法来方便地操作Optional对象。