Java8 Optional 使用
阿新 • • 發佈:2018-12-25
Optional 一個可以為 null 的容器
所在包:import java.util.Optional;
基本方法:
of()
為非 null 的值建立一個 Optional 例項isPresent()
如果值存在,返回 true,否則返回 falseget()
返回該物件,有可能返回 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