在 Java 8 引入的 java.util.Optional<T> 主要用于避免 NullPointerException,表示一个值可能存在也可能不存在。下面按使用频率整理常用方法,并给出示例。
Optional.of(T value)值不能为 null,否则抛 NPE
Optional<String> opt = Optional.of("hello");
Optional.ofNullable(T value)允许为 null,最常用
Optional<String> opt = Optional.ofNullable(null);
Optional.empty()创建一个空的 Optional
Optional<String> opt = Optional.empty();
isPresent()判断是否有值
if (opt.isPresent()) {
System.out.println(opt.get());
}
isEmpty()(Java 11+)判断是否为空
if (opt.isEmpty()) {
// 无值
}
get()有值返回值,无值抛 NoSuchElementException(不推荐直接使用)
String s = opt.get();
orElse(T other)无值时返回默认值
String s = opt.orElse("default");
orElseGet(Supplier<? extends T>)无值时通过函数生成(延迟执行)
String s = opt.orElseGet(() -> "generated");
orElseThrow()无值时抛异常(Java 10+)
String s = opt.orElseThrow();
orElseThrow(Supplier<? extends X> exceptionSupplier)自定义异常
String s = opt.orElseThrow(() -> new RuntimeException("not found"));
ifPresent(Consumer<? super T>)有值时执行
opt.ifPresent(System.out::println);
ifPresentOrElse(Java 9+)有值 / 无值分别处理
opt.ifPresentOrElse(
v -> System.out.println(v),
() -> System.out.println("empty")
);
map(Function<? super T, ? extends U>)有值则转换
Optional<Integer> len = opt.map(String::length);
flatMap(Function<? super T, Optional<U>>)避免 Optional 嵌套
Optional<String> result = opt.flatMap(s -> Optional.of(s.toUpperCase()));
filter(Predicate<? super T>)不满足条件返回 empty
opt.filter(s -> s.length() > 3);
stream()转为 Stream,方便集合操作
opt.stream().forEach(System.out::println);
✅ 推荐
ofNullablemap / flatMaporElse / orElseGetifPresent❌ 不推荐
get()如果你需要,我也可以:
orElse vs orElseGet免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。