Java8 - Optional 类

Optional 是一个容器对象,用来包含非空对象。 Optional 对象用于表示没有值的 null。 此类具有各种实用方法,以方便代码将值处理为"可用"或"不可用",而不是检查空值。 它是在 Java8 中引入的,类似于 Guava 中的 Optional。


类声明

下面是 java.util.Optional<T> 类的声明 −

public final class Optional<T> extends Object

类方法

序号 方法 & 说明
1

static <T> Optional<T> empty()

返回一个空的 Optional 实例。

2

boolean equals(Object obj)

指示某个其他对象是否"等于"此 Optional。

3

Optional<T> filter(Predicate<? super <T> predicate)

如果存在一个值并且该值与给定的谓词匹配,它返回一个描述该值的 Optional,否则返回一个空的 Optional。

4

<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)

如果存在一个值,它将提供的 Optional-bearing 映射函数应用于它,返回该结果,否则返回一个空的 Optional。

5

T get()

如果此 Optional 中存在值,则返回该值,否则抛出 NoSuchElementException。

6

int hashCode()

返回当前值的散列码值(如果有),如果不存在值则返回 0(零)。

7

void ifPresent(Consumer<? super T> consumer)

如果存在一个值,它会用该值调用指定的消费者,否则什么也不做。

8

boolean isPresent()

如果存在值则返回真,否则返回假。

9

<U>Optional<U> map(Function<? super T,? extends U> mapper)

如果存在一个值,则将提供的映射函数应用于它,如果结果为非空,则返回一个描述结果的 Optional。

10

static <T> Optional<T> of(T value)

返回一个具有指定当前非空值的 Optional。

11

static <T> Optional<T> ofNullable(T value)

返回一个描述指定值的 Optional,如果非空,否则返回一个空的 Optional。

12

T orElse(T other)

如果存在则返回值,否则返回其他值。

13

T orElseGet(Supplier<? extends T> other)

如果存在则返回值,否则调用 other 并返回该调用的结果。

14

<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)

返回包含的值(如果存在),否则抛出由提供的 supplier 创建的异常。

15

String toString()

返回此 Optional 适合调试的非空字符串表示。

这个类继承了下面这个类的方法 −

  • java.lang.Object

可选示例

使用您选择的任何编辑器(例如 C:\> JAVA)创建以下 Java 程序。

Java8Tester.java

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 - 允许传递的参数为空。
      Optional<Integer> a = Optional.ofNullable(value1);
		
      //Optional.of - 如果传递的参数为 null,则抛出 NullPointerException
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a,b));
   }
	
   public Integer sum(Optional<Integer> a, Optional<Integer> b) {
      //Optional.isPresent - 检查值是否存在
		
      System.out.println("First parameter is present: " + a.isPresent());
      System.out.println("Second parameter is present: " + b.isPresent());
		
      //Optional.orElse - 如果存在则返回值,否则返回
      //传递的默认值。
      Integer value1 = a.orElse(new Integer(0));
		
      //Optional.get - 获取值,值应该存在
      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