Java 8 Optional 类
Java 8 Optional 类
Optional 是用于包含非null对象的容器对象。Optional 对象用于表示缺少值的null值。这个类有各种实用方法来帮助代码将值处理为“available”或“not available”,而不是检查null值。它是在Java 8中引入的,类似于Guava中的Optional。
Optional类声明
以下是java.util.Optional<T>类的声明:
public final class Optional<T> extends Object
Optional类方法
static <T> Optional<T> empty():返回一个空的Optional实例.
boolean equals(Object obj):判断某个对象是否“等于”该Optional类.
Optional<T> filter(Predicate<? super <T> predicate):如果存在一个值,并且该值与给定谓词匹配,则返回描述该值的Optional值,否则返回空Optional值。
<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper):如果存在值,它会将提供的Optional方位映射函数应用于该值,返回该结果,否则返回空的Optional值。
T get():如果此Optional中存在值,则返回该值,否则抛出NoSuchElementException。
int hashCode():返回当前值的哈希代码值(如果有),如果没有值,则返回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):返回一个可选值,具有指定的当前非空值。
static <T> Optional<T> ofNullable(T value):返回描述指定值的可选值(如果非null ),否则返回空可选值。
T orElse(T other):返回值(如果存在),否则返回其他。
T orElseGet(Supplier<? extends T> other):返回值(如果存在),否则调用其他并返回该调用的结果。
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier):返回包含的值(如果存在),否则将引发由提供的供应商创建的异常。
String toString():返回适合调试的此Optional项的非空字符串表示形式。
此类继承了以下类的方法
java.lang.Object
Optional的例子
使用任何编辑器创建以下Java程序,例如C:\> JAVA.
Java8Tester.java
Live Demo
import java.util.Optional;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8Tester = new Java8Tester();
Integer value1 = null;
Integer value2 = new Integer(10);
//Optional.ofNullable - allows passed parameter to be null.
Optional<Integer> a = Optional.ofNullable(value1);
//Optional.of - throws NullPointerException if passed parameter is null
Optional<Integer> b = Optional.of(value2);
System.out.println(java8Tester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
//Optional.isPresent - checks the value is present or not
System.out.println("First parameter is present: " + a.isPresent());
System.out.println("Second parameter is present: " + b.isPresent());
//Optional.orElse - returns the value if present otherwise returns
//the default value passed.
Integer value1 = a.orElse(new Integer(0));
//Optional.get - gets the value, value should be present
Integer value2 = b.get();
return value1 + value2;
}
}校验结果
使用javac编译器编译类,如下所示
C:\JAVA>javac Java8Tester.java
现在运行Java8Tester:
C:\JAVA>java Java8Tester
它应该产生以下输出:
First parameter is present: false Second parameter is present: true 10