Java Optional
2017-04-21 10:20
85 查看
【说明】
Optional类,由值是否为null或not null而处理不同。
Optional对象的值为null时,返回empty对象。
Optional类的主要方法
OptionalSample1.java
import java.util.Optional;
import java.util.stream.Stream;
public class OptionalSample1 {
public static void main(String[] args) {
Optional<Integer> op1 = Optional.of(10);
Optional<Integer> op2 = Optional.empty();
System.out.println(op1.get());
System.out.println(op1.isPresent());
System.out.println(op2.isPresent());
Stream<Double> stream = Stream.empty();
Optional<Double> result = stream.findFirst();
System.out.println(result.orElse(0.0));
System.out.println(result.orElseGet(() -> Math.random()));
System.out.println(result.orElseThrow(IllegalArgumentException::new));
}
}
输出:
10
true
false
0.0
0.5137508511584216
Exception in thread "main" java.lang.IllegalArgumentException
at java.util.Optional.orElseThrow(Optional.java:290)
at OptionalSample1.main(OptionalSample1.java:20)
Optional类,由值是否为null或not null而处理不同。
Optional对象的值为null时,返回empty对象。
方法名 | 说明 |
---|---|
static <T> Optional<T> empty() | 返回空的Optional实例。这个Optional里没有值。 |
static <T> Optional<T> of (T value) | 返回包含由该参数指定非null值的Optional。 |
T get() | 如果存在值,则返回该值。否则抛出NoSuchElementException异常。 |
boolean isPresent() | 如果存在值,则返回true。否则返回false。 |
void ifPresent(Consumer<? super T> consumer) | 如果该值存在,则由指定的Consumer调用该值,否则不会做任何事情 |
T orElse(T other) | 如果存在值,则返回该值。否则返回false。 |
T orElseGet(Supplier<? extends T> other) | 如果存在值,则返回该值。否则调用Supplier,返回调用结果。 |
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throw X entends Throwable | 如果存在值,则返回该值。否则抛出调用Supplier做成的异常。 |
import java.util.Optional;
import java.util.stream.Stream;
public class OptionalSample1 {
public static void main(String[] args) {
Optional<Integer> op1 = Optional.of(10);
Optional<Integer> op2 = Optional.empty();
System.out.println(op1.get());
System.out.println(op1.isPresent());
System.out.println(op2.isPresent());
Stream<Double> stream = Stream.empty();
Optional<Double> result = stream.findFirst();
System.out.println(result.orElse(0.0));
System.out.println(result.orElseGet(() -> Math.random()));
System.out.println(result.orElseThrow(IllegalArgumentException::new));
}
}
输出:
10
true
false
0.0
0.5137508511584216
Exception in thread "main" java.lang.IllegalArgumentException
at java.util.Optional.orElseThrow(Optional.java:290)
at OptionalSample1.main(OptionalSample1.java:20)