Java8 Optional类
精华
小牛编辑
120浏览
2023-03-14
1 Java8 Optional类的介绍
Java在Jdk 8中引入了新的Optional类。它是一个公共的final类,用于处理Java应用程序中的NullPointerException。您必须导入java.util包才能使用此类。它提供了用于检查特定变量的值是否存在的方法。
2 Java8 Optional类的方法
方法 | 描述 |
---|---|
public static <T> Optional<T> empty() | 返回一个空的Optional对象。此可选的值不存在。 |
public static <T> Optional<T> of(T value) | 返回带有指定的当前非空值的Optional。 |
public static <T> Optional<T> ofNullable(T value) | 如果非空,则返回描述指定值的Optional,否则返回空的Optional。 |
public T get() | 如果此Optional中存在一个值,则返回该值,否则抛出NoSuchElementException。 |
public boolean isPresent() | 如果存在值,则返回true,否则返回false。 |
public void ifPresent(Consumer<? super T> consumer) | 如果存在值,请使用该值调用指定的使用者,否则不执行任何操作。 |
public Optional<T> filter(Predicate<? super T> predicate) | 如果存在一个值,并且该值与给定谓词匹配,则返回描述该值的Optional,否则返回一个空的Optional。 |
public <U> Optional<U> map(Function<? super T,? extends U> mapper) | 如果存在值,则将提供的映射函数应用于该值,如果结果为非null,则返回描述结果的Optional。否则,返回一个空的Optional。 |
public <U> Optional<U> flatMap(Function<? super T,Optional<U> mapper) | 如果存在一个值,则对其应用所提供的带有可选参数的映射函数,返回该结果,否则返回一个空的Optional。 |
public T orElse(T other) | 如果存在,则返回该值,否则返回other。 |
public T orElseGet(Supplier<? extends T> other) | 如果存在该值,则返回该值;否则调用其他值,并返回该调用的结果。 |
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X extends Throwable | 返回包含的值(如果存在),否则抛出异常,由提供的供应商创建。 |
public boolean equals(Object obj) | 指示其他某个对象是否“等于”此Optional。如果满足以下条件,则认为另一个对象相等:
|
public int hashCode() | 返回当前值的哈希码值(如果有),如果没有值,则返回0(零)。 |
public String toString() | 返回此Optional的非空字符串表示形式,适用于调试。确切的表示格式未指定,并且在实现和版本之间可能有所不同。 |
3 Java8 Optional类案例:不使用Optional类
在下面的示例中,我们没有使用Optional类。该程序异常终止并抛出nullPointerException。
/**
* 小牛知识库网: https://www.xnip.cn
*/
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
String lowercaseString = str[5].toLowerCase();
System.out.print(lowercaseString);
}
}
输出结果为:
Exception in thread "main" java.lang.NullPointerException
at lambdaExample.OptionalExample.main(OptionalExample.java:6)
为了避免异常终止,我们使用Optional类。在下面的示例中,我们使用Optional。因此,我们的程序可以执行而不会崩溃。
4 Java8 Optional类案例1:如果不存在值
/**
* 小牛知识库网: https://www.xnip.cn
*/
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
Optional<String> checkNull = Optional.ofNullable(str[5]);
if(checkNull.isPresent()){ // check for value is present or not
String lowercaseString = str[5].toLowerCase();
System.out.print(lowercaseString);
}else
System.out.println("string value is not present");
}
}
输出结果为:
string value is not present
5 Java8 Optional类案例2:如果存在值
/**
* 小牛知识库网: https://www.xnip.cn
*/
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
str[5] = "JAVA OPTIONAL CLASS EXAMPLE";// Setting value for 5th index
Optional<String> checkNull = Optional.ofNullable(str[5]);
if(checkNull.isPresent()){ // It Checks, value is present or not
String lowercaseString = str[5].toLowerCase();
System.out.print(lowercaseString);
}else
System.out.println("String value is not present");
}
}
输出结果为:
java optional class example
6 Java8 Optional类案例3
/**
* 小牛知识库网: https://www.xnip.cn
*/
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
str[5] = "JAVA OPTIONAL CLASS EXAMPLE"; // Setting value for 5th index
Optional<String> checkNull = Optional.ofNullable(str[5]);
checkNull.ifPresent(System.out::println); // printing value by using method reference
System.out.println(checkNull.get()); // printing value by using get method
System.out.println(str[5].toLowerCase());
}
}
输出结果为:
JAVA OPTIONAL CLASS EXAMPLE
JAVA OPTIONAL CLASS EXAMPLE
java optional class example