Java可选类

Java在jdk8中引入了新的Optional类。它是一个公共的最终类, 用于处理Java应用程序中的NullPointerException。你必须导入java.util包才能使用此类。它提供了用于检查特定变量的值是否存在的方法。
Java可选的类方法

方法 描述
公共静态< T> 可选< T> empty() 它返回一个空的Optional对象。此可选的值不存在。
(T值)的公共静态< T> 可选< T> 它返回带有指定的当前非空值的Optional。
Nullable(T值)的公共静态< T> 可选< T> 如果非null, 则返回描述指定值的Optional, 否则返回空的Optional。
public T get() 如果此Optional中存在一个值, 则返回该值, 否则抛出NoSuchElementException。
public boolean isPresent() 如果存在值, 则返回true, 否则返回false。
公共无效ifPresent(Consumer < ?super T> 消费者) 如果存在值, 请使用该值调用指定的使用者, 否则不执行任何操作。
public Optional < T> 过滤器(谓词< ?super T> 谓词) 如果存在值, 并且该值与给定谓词匹配, 则返回描述该值的Optional, 否则返回一个空的Optional。
public < U> 可选< U> 映射(功能< ?超级T , ?扩展了U> 映射器) 如果存在值, 则将提供的映射函数应用于该值, 如果结果为非null, 则返回描述结果的Optional。否则, 返回一个空的Optional。
public < U> 可选< U> flatMap(函数< ?super T, 可选< U> 映射器) 如果存在一个值, 则对它应用提供的带有可选参数的映射函数, 返回该结果, 否则返回一个空的Optional。
public T orElse(T other) 如果存在, 则返回该值, 否则返回other。
公共T orElseGet(供应商< ?扩展T> 其他) 如果存在该值, 则返回该值;否则调用其他值, 并返回该调用的结果。
公共< X扩展Throwable> T orElseThrow(Supplier < ?扩展X> exceptionSupplier)抛出X扩展Throwable 它返回包含的值(如果存在), 否则抛出异常, 由提供的供应商创建。
public boolean equals(Object obj) 指示其他某个对象是否“等于”此Optional。如果满足以下条件, 则认为另一个对象相等:它也是可选的;并且两个实例都不存在值;或者当前值通过equals()彼此“相等”。
public int hashCode() 它返回当前值的哈希码值(如果有), 如果没有值, 则返回0(零)。
public String toString() 它返回此Optional的非空字符串表示形式, 适用于调试。确切的表示格式未指定, 在实现和版本之间可能会有所不同。
示例:不使用Optional的Java程序
在下面的示例中, 我们没有使用Optional类。该程序异常终止并抛出nullPointerException。
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。因此, 我们的程序可以执行而不会崩溃。
Java可选示例:如果不存在Value
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"); } }

【Java可选类】输出:
string value is not present

Java可选示例:如果存在值
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

另一个Java可选示例
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

Java可选方法示例
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 // It returns an empty instance of Optional class Optional< String> empty = Optional.empty(); System.out.println(empty); // It returns a non-empty Optional Optional< String> value = http://www.srcmini.com/Optional.of(str[5]); // If value is present, it returns an Optional otherwise returns an empty Optional System.out.println("Filtered value: "+value.filter((s)-> s.equals("Abc"))); System.out.println("Filtered value: "+value.filter((s)-> s.equals("JAVA OPTIONAL CLASS EXAMPLE"))); // It returns value of an Optional. if value is not present, it throws an NoSuchElementException System.out.println("Getting value: "+value.get()); // It returns hashCode of the value System.out.println("Getting hashCode: "+value.hashCode()); // It returns true if value is present, otherwise false System.out.println("Is value present: "+value.isPresent()); // It returns non-empty Optional if value is present, otherwise returns an empty Optional System.out.println("Nullable Optional: "+Optional.ofNullable(str[5])); // It returns value if available, otherwise returns specified value, System.out.println("orElse: "+value.orElse("Value is not present")); System.out.println("orElse: "+empty.orElse("Value is not present")); value.ifPresent(System.out::println); // printing value by using method reference } }

输出:
Optional.empty Filtered value: Optional.empty Filtered value: Optional[JAVA OPTIONAL CLASS EXAMPLE] Getting value: JAVA OPTIONAL CLASS EXAMPLE Getting hashCode: -619947648 Is value present: true Nullable Optional: Optional[JAVA OPTIONAL CLASS EXAMPLE] orElse: JAVA OPTIONAL CLASS EXAMPLE orElse: Value is not present JAVA OPTIONAL CLASS EXAMPLE

    推荐阅读