Java8 Optional类

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。如果满足以下条件,则认为另一个对象相等:它也是可选的;并且两个实例都不存在值;或者当前值通过equals() 彼此“相等”。
public int hashCode()返回当前值的哈希码值(如果有),如果没有值,则返回0(零)。
public String toString()返回此Optional的非空字符串表示形式,适用于调试。确切的表示格式未指定,并且在实现和版本之间可能有所不同。

3 Java8 Optional类案例:不使用Optional类

在下面的示例中,我们没有使用Optional类。该程序异常终止并抛出nullPointerException。

/**
 * https://www.jhelp.com
 */
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.jhelp.com
 */
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.jhelp.com
 */
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.jhelp.com
 */
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
腾讯云推出云产品限时特惠抢购活动:2C2G云服务器7.9元/月起
本文链接:https://www.jhelp.net/p/ujXanDjftEGaUFtD (转载请保留)。
关注下面的标签,发现更多相似文章