Java8 Optional 使用

Optional 一个可以为 null 的容器

所在包:import java.util.Optional;

基本方法:

  • of() 为非 null 的值创建一个 Optional 实例
  • isPresent() 如果值存在,返回 true,否则返回 false
  • get() 返回该对象,有可能返回 null
Optional<String> op1 = Optional.of("Hello");
System.out.println(op1.isPresent()); // 输出 true
System.out.println(op1.get()); // 输出 Hello
Optional<String> op2 = Optional.of(null); // 抛出异常
  • OfNullable() 如果指定的值为 null,返回一个空的 Optional
Optional<String> op2 = Optional.ofNullable(null);
System.out.println(op2.isPresent()); // 输出 false
  • ifPresent() 如果实例非空,调用 Comsumer Lambda 表达式
    API 如下:
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
});
  • map() 如果实例非空,调用 Function Lambda 表达式
    API 如下:
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
});
  • 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
  • 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

猜你喜欢

转载自blog.csdn.net/fall_hat/article/details/84301373