温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Optional 有哪些常用方法

发布时间:2026-09-19 07:16:20 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

在 Java 8 引入的 java.util.Optional<T> 主要用于避免 NullPointerException,表示一个值可能存在也可能不存在。下面按使用频率整理常用方法,并给出示例。


一、创建 Optional

1. Optional.of(T value)

值不能为 null,否则抛 NPE

Optional<String> opt = Optional.of("hello");

2. Optional.ofNullable(T value)

允许为 null,最常用

Optional<String> opt = Optional.ofNullable(null);

3. Optional.empty()

创建一个空的 Optional

Optional<String> opt = Optional.empty();

二、判断与获取值

4. isPresent()

判断是否有值

if (opt.isPresent()) {
    System.out.println(opt.get());
}

5. isEmpty()(Java 11+)

判断是否为空

if (opt.isEmpty()) {
    // 无值
}

6. get()

有值返回值,无值抛 NoSuchElementException(不推荐直接使用)

String s = opt.get();

三、安全取值(推荐)

7. orElse(T other)

无值时返回默认值

String s = opt.orElse("default");

8. orElseGet(Supplier<? extends T>)

无值时通过函数生成(延迟执行)

String s = opt.orElseGet(() -> "generated");

9. orElseThrow()

无值时抛异常(Java 10+)

String s = opt.orElseThrow();

10. orElseThrow(Supplier<? extends X> exceptionSupplier)

自定义异常

String s = opt.orElseThrow(() -> new RuntimeException("not found"));

四、函数式处理(核心用法)

11. ifPresent(Consumer<? super T>)

有值时执行

opt.ifPresent(System.out::println);

12. ifPresentOrElse(Java 9+)

有值 / 无值分别处理

opt.ifPresentOrElse(
    v -> System.out.println(v),
    () -> System.out.println("empty")
);

13. map(Function<? super T, ? extends U>)

有值则转换

Optional<Integer> len = opt.map(String::length);

14. flatMap(Function<? super T, Optional<U>>)

避免 Optional 嵌套

Optional<String> result = opt.flatMap(s -> Optional.of(s.toUpperCase()));

五、过滤

15. filter(Predicate<? super T>)

不满足条件返回 empty

opt.filter(s -> s.length() > 3);

六、流式支持(Java 9+)

16. stream()

转为 Stream,方便集合操作

opt.stream().forEach(System.out::println);

七、典型使用建议

✅ 推荐

  • ofNullable
  • map / flatMap
  • orElse / orElseGet
  • ifPresent

❌ 不推荐

  • 直接使用 get()
  • 把 Optional 作为方法参数
  • 用 Optional 包装集合(用空集合更好)

如果你需要,我也可以:

  • 对比 orElse vs orElseGet
  • 给一个完整的业务示例
  • 说明 Optional 在 Spring / JPA 中的用法
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手