Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。下面就来看看 Optional 类的常用方法。
1.of()
为非 null 的值创建一个 Optional 实例
Optional<String> op1 = Optional.of("helloOptional");
Optional<String> op2 = Optional.of(null); // 抛出异常
那如果我就是要给null创建容器呢,怎么办?接着往下看...
2.isPresent()
如果值存在,返回 true,否则返回 false
System.out.println(op1.isPresent()); // 输出 true
3.get()
返回该对象,有可能返回 null
System.out.println(op1.get()); // 输出 helloOptional
4.OfNullable()
如果指定的值为 null,返回一个空的 Optional
Optional<String> op2 = Optional.ofNullable(null);
System.out.println(op2.isPresent()); // 输出 false
5.ifPresent()
如果实例非空,调用 Comsumer Lambda 表达式
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
使用:
Optional<String> op1 = Optional.of("Hello");
op1.ifPresent((s) -> {
System.out.println(s); // 输出 Hello
});
6.map()
如果实例非空,调用 Function Lambda 表达式
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
使用:
Optional<String> op1 = Optional.of("Hello");
Optional<String> op2 = op1.map((s) -> s.toUpperCase());
op2.ifPresent((s) -> {
System.out.println(s); // 输出 HELLO
});
7.orElse(obj)
如果实例非空,返回该实例,否则返回 obj
Optional<String> op1 = Optional.of("Hello");
System.out.println(op1.orElse("World")); // 输出 Hello
Optional<String> op2 = Optional.ofNullable(null);
System.out.println(op2.orElse("World")); // 输出 World
8.orElseGet(Supplier<? extends T> other)
如果实例非空,返回该实例,否则返回 Supplier
Optional<String> op1 = Optional.of("Hello");
System.out.println(op1.orElseGet(() -> {return new String("World");})); // 输出 Hello
Optional<String> op2 = Optional.ofNullable(null);
System.out.println(op2.orElseGet(() -> {return new String("World");})); // 输出 World